索引使用说明

时间:2018-03-08 16:58:08

标签: sql postgresql indexing

考虑这个测试设置:

CREATE TABLE dept (deptid integer PRIMARY KEY, deptname TEXT);
CREATE INDEX dept_name_idx on dept(deptname);

dept表包含1000行,deptname列包含10个均匀分布的唯一值。

以下两个示例查询中的哪一个将使用索引dept_deptname_idx

1)SELECT deptid from dept where deptname ='SAPA';

2)SELECT deptid from dept where deptname <>'SAPA';

1 个答案:

答案 0 :(得分:2)

只有 10 不同的值,均匀分布,很可能 查询都不会使用索引。在检索超过大约5%的所有行时,对表的顺序扫描通常比涉及任何索引更快。确切的数字取决于许多细节。

此外,您的示例中的1000个小行适合充满数据页的手。如此小的表格很难打败顺序扫描。

deptname中有一个更大的表和/或更明显的值,查询1 将是使用索引的候选者,但不是查询2 (检索大多数行并始终使用顺序扫描)。

要优化查询1的读取性能,您可以在(deptname, deptid)上使用多列索引 - 如果符合index-only scans的前提条件。