我的架构看起来像这样:
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
子句中的两列很慢,它只是告诉我使用两列的速度有多慢
答案 0 :(得分:3)
要通过索引优化order by image_id desc, image_tag_id desc
排序,您需要拥有此索引:
create index image_tags_id_tag on image_tags(image_id, image_tag_id);
只有一个复合索引(我假设的例外情况很少,但在这种情况下不是这样)会帮助优化器立即使用它来确定订单。
答案 1 :(得分:1)
您只有一个与您要执行的查询关联的列的索引,为了更快的速度,您应该创建一个双列索引,例如
create index on image_tags(image_id, image_tag_id);
答案 2 :(得分:1)
create index on image_tags(image_id, image_tag_id);
尝试编制索引..