sql - 索引使用说明

标签 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';

最佳答案

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

此外,像您的示例中那样的 1000 小行适合装满数据页的手。如此小的表格很难击败顺序扫描。

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

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

关于sql - 索引使用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49178498/

相关文章:

python - 在数据框中查找 "missing"值的最佳方法是什么?

sql - sqlite`order by`和`where`子句可以一起使用Index吗

r - 在 R 中创建 data.frame 列组合的索引

sql - 将 IF 和临时表与变量以及 BEGIN/END 语句结合使用

c# - SQL Server CE 在某些计算机上速度极慢

php - 当 PDO 中没有行时返回值

sql - Postgresql 替换函数

sql - 仅选择具有唯一字段的行

ruby - postgres 中的空闲连接导致进程卡住或导致错误

sql - 如何使 PostgresQL 优化器在绑定(bind)参数后构建执行计划?