0

据我了解,当我们使用COUNT,DISTINCTLIKE %query%(两边的通配符)关键字运行 SQL 查询时,无法使用索引,数据库必须进行全表扫描。

有什么方法可以提高这些查询的性能吗?

他们真的不能使用索引还是我们可以以某种方式解决这个问题?

如果我们只需要返回一列,我们可以进行仅索引扫描吗?例如:select count(id) from MY_TABLE: 可能在这种情况下,如果我们在“id”上有索引,我们可以进行仅索引扫描并避免命中整个表?

我的问题具有一般意义:如果我们必须使用上述运算符,您能给我一些性能指南吗?

更新至于我,我使用 PostgreSQL。

4

1 回答 1

0

使用 PostgreSQL,您可以为文本字符串创建 GIN pg_trgm 索引以使 LIKE '%foo%' 更快,但这需要插件和 PostgreSQL 9.1 或更高版本。

我怀疑 distinct 本身是否会使用索引。事实上,我尝试过,但无法使用它。您可以通过使用递归 CTE 将单个记录拉出(可以称为“稀疏扫描”)来强制使用索引。当从会计记录中提取个别年份时,我们会这样做。不过,这需要编写特殊查询,因此并不是一般情况。

由于 mvcc 规则,count(*) 永远无法使用索引。但是,您可以通过查看相应的系统目录来获得近似结果。

于 2013-05-15T00:55:13.547 回答