我有一个看起来像这样的模式:
create table image_tags (
image_tag_id serial primary key,
image_id int not null
);
create index on image_tags(image_id);
当我执行包含两列的查询时,速度慢得离谱(例如,select * from image_tags order by image_id desc, image_tag_id desc limit 10;
)。如果我在排序中删除其中一列(哪个无关紧要),它会非常快。
我在两个查询中都使用了 explain
,但它并没有帮助我理解为什么 order by
子句中的两列如此缓慢,它只是告诉我有多少使用两列速度较慢。
最佳答案
要通过索引优化order by image_id desc, image_tag_id desc
排序,您需要有这个索引:
create index image_tags_id_tag on image_tags(image_id, image_tag_id);
只有一个复合索引(我认为几乎没有异常(exception),但在这种情况下不是)将有助于优化器使用它来立即确定顺序。
关于sql - 两列的 ORDER BY 比两列的 ORDER BY 慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26092250/