我有一个这样的SQL语句:
SELECT * FROM "table1" WHERE "id" In('1', '2', '3') ORDER BY "createdAt"
我认为索引“ createdAt”列的好处非常小,因为它先进行选择,然后对3行进行排序。我对么?还是添加索引更好?
您显示的查询有两种可能的索引策略:
索引IN
条件:
CREATE INDEX ON table1 (id);
如果条件是选择性的,那就是一个好主意,也就是说,如果很少有表行与条件匹配。
索引ORDER BY
子句:
CREATE INDEX ON table1 ("createdAt");
然后,数据库可以扫描索引以按ORDER BY
顺序获得结果行,而无需显式排序。
仅当IN
条件不是选择性的(即,大多数表行都满足该条件)时,这才是有益的。
但是,取决于行大小和其他参数,PostgreSQL可能会选择使用顺序扫描和显式排序,除非您用LIMIT
子句限制结果行的数量。
不幸的是,不可能有同时支持IN
条件和条件的索引ORDER BY
-只有WHERE
条件是简单的相等比较时才可能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句