Els*_*yed 9 sql database postgresql indexing query-optimization
我正在使用 Postgres 数据库,我试图查看 1000000 行表上的索引扫描和顺序扫描之间的区别
描述表
\d grades
Run Code Online (Sandbox Code Playgroud)
然后解释分析 10 到 500000 之间的行
explain analyze select name from grades where pid between 10 and 500000 ;
Run Code Online (Sandbox Code Playgroud)
然后解释分析 10 到 600000 之间的行
explain analyze select name from grades where pid between 10 and 600000 ;
Run Code Online (Sandbox Code Playgroud)
对我来说奇怪的是,为什么它在第一个查询中进行索引扫描,在第二个查询中进行顺序扫描,尽管它们通过索引中包含的同一列进行查询。
Lau*_*lbe 25
如果您只需要单个表行,则索引扫描比顺序扫描快得多。如果需要整个表,顺序扫描比索引扫描更快。
这之间的某个时间点是 PostgreSQL 在这两种访问方法之间切换的转折点。
您可以进行调整random_page_cost以影响选择顺序扫描的点。如果您有 SSD 存储,则应将该参数设置为 1.0 或 1.1,以告诉 PostgreSQL 索引扫描在您的硬件上更便宜。