考虑这个测试设置:
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';
最佳答案
只有 10 个不同的值,均匀分布,两者 查询都可能使用索引。当检索超过所有行的大约 5% 时,顺序扫描表通常比涉及任何索引更快。确切的数字取决于许多细节。
此外,像您的示例中那样的 1000 小行适合装满数据页的手。如此小的表格很难击败顺序扫描。
deptname
中有一个更大的表和/或更多不同的值,query 1 将是使用索引的候选者,但 query 2 不是(它检索大部分行并将始终使用顺序扫描)。
要优化查询 1 的读取性能,您可以在 (deptname, deptid)
上使用多列索引 - 如果 index-only scans 的先决条件满足。
关于sql - 索引使用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49178498/