【发布时间】:2013-04-04 16:32:16
【问题描述】:
据我了解,当我们使用COUNT、DISTINCT 或LIKE %query%(两边都是通配符)关键字运行 SQL 查询时,无法使用索引,数据库必须进行全表扫描。
有没有办法提高这些查询的性能?
他们真的不能使用索引还是我们可以通过某种方式解决这个问题?
如果我们只需要返回一列,我们可以进行仅索引扫描吗?例如:select count(id) from MY_TABLE:可能在这种情况下,如果我们在 'id' 上有索引,我们可以进行仅索引扫描并避免命中整个表?
我的问题具有一般意义:如果我们必须使用上述运算符,您能给我一些性能指南吗?
更新 至于我,我使用 PostgreSQL。
【问题讨论】:
-
什么关系型数据库? SQL Server 将在
id(如果可用)上为select count(id) from MY_TABLE使用更窄的索引 -
即使没有任何条件,
SELECT DISTINCT a,b FROM t;也会使用(a,b)或(b,a)上的索引 -
不,这只是一个例子。如果索引与您在选择中的内容匹配,则应使用它。除非当然(在这里添加一百个例外,例如):桌子太小了吗?
column_name是什么数据类型?哪个 Postgres 版本? -
Postgres 可以使用
like '%foo%'的索引 -
@MikeChristensen:带有特殊索引:depesz.com/2011/02/19/waiting-for-9-1-faster-likeilike
标签: performance postgresql count distinct sql-like