我有一个大表格(约1100万行),我需要根据排序条件找到第一个项目。
请注意,列Date
不接受空值。
为什么Postgres没有使用索引:
CREATE INDEX track_ix_date
ON "Track"
USING btree
("Date" DESC NULLS LAST);
在这个简单的查询中:
select * from "Track" order by "Date" desc limit 1
但它确实在另一个查询中使用了它:
select * from "Track" order by "Date" desc nulls last limit 1
第二个查询实际上比第一个查询快得多。
我已经阅读了索引和ORDER BY文档,并且指出在具有LIMIT
子句的ORDER BY
的特殊情况下,使用索引而不是扫描表格要高效得多,因为排序需要扫描整个表格才能获取单个项目。
既然该列不接受null值,Postgres不应该检测到nulls last / first
无关紧要并只使用最快的方法吗?
explain(analyze,verbose)
生成的执行计划。请使用格式化文本,不要使用屏幕截图。 - user330315