sql - 两列的 ORDER BY 比两列的 ORDER BY 慢得多

标签 sql postgresql

我有一个看起来像这样的模式:

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/

相关文章:

mysql - 每天按 ID 顺序查询一次 SQL 查询

sql - 可以将Elasticsearch用于星型模式吗?

mysql - 使用两个 LEFT JOIN 和 GROUP BY 时 SUM 不正确

mysql - PostgreSQL 和 MySQL 中 BigQuery STRUCT 的类比

ruby-on-rails - FTS - 优化的 pg_search 在搜索中不使用字典

sql - 如何在 PostgreSQL 中以不同的方式使用 overlay()?

python - 将 PostgreSQL 加速到 BigQuery

SQL - 如何根据唯一值合并行

mysql - 仅从sql中的地址列获取数字

regex - 使用正则表达式清理公司名称