Raf*_*ael 9 postgresql indexing sql-order-by
我有一个大表(大约 11,000,000 行),我需要找到给定排序条件的第一项。
请注意,列Date没有不接受空
为什么 Postgres 不使用索引:
CREATE INDEX track_ix_date
ON "Track"
USING btree
("Date" DESC NULLS LAST);
Run Code Online (Sandbox Code Playgroud)
在这个简单的查询中:
select * from "Track" order by "Date" desc limit 1
Run Code Online (Sandbox Code Playgroud)
但它确实在另一个查询中使用了它:
select * from "Track" order by "Date" desc nulls last limit 1
Run Code Online (Sandbox Code Playgroud)
第二个查询实际上比第一个查询快得多。
我已经阅读了索引和 ORDER BY文档,并说在ORDER BYwith aLIMIT子句的特殊情况下使用索引而不是扫描表更有效,因为排序需要扫描整个表才能获得一个物品
Postgresnulls last / first不应该检测到这无关紧要,因为该列不接受空值而只使用最快的方法吗?
总是需要权衡,因为让优化器变得更智能也意味着让优化器变得更慢,这对每个人都会造成伤害。
目前,它还不够智能,因此您必须更改索引定义或查询才能使其正常工作。
也许值得在 pgsql-hackers 邮件列表上请求这样的改进,或者自己编写一个补丁并在那里提交。
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |