PostgreSQL按日期取最新行:建索引还是排序整张表?
交易表获取最新100条记录的性能优化方案
两种方案的优劣分析
方案一:全表排序后取前100行
这种做法既不合理,也不属于良好的SQL实践。如果不对Date列加索引,执行ORDER BY Date DESC LIMIT 100时,数据库需要先扫描整张表的所有数据,再对全部记录做排序操作,最后才能取出前100条。表的数据量越大,排序的开销就越高,资源占用会直线上升,完全达不到“开销极低”的要求。
方案二:在Date列创建索引
这才是正确的优化方向。给Date列创建降序索引(匹配你获取最新记录的需求),示例语句:
CREATE INDEX idx_transactions_date_desc ON transactions(Date DESC);
创建索引后,数据库可以直接通过索引快速定位到最新的100条记录,不需要全表扫描和全表排序,查询的性能开销极低,而且不管表的数据量增长到多大,这个查询的性能都能保持稳定。
后续执行查询时,直接使用:
SELECT * FROM transactions ORDER BY Date DESC LIMIT 100;
数据库会自动利用已创建的索引高效获取数据,完全满足你的需求。
内容的提问来源于stack exchange,提问作者rex
相关产品推荐
相关产品推荐

