MYSQL:为啥两个几乎相同的查询的 ORDER BY 时间不同

Posted

技术标签:

【中文标题】MYSQL:为啥两个几乎相同的查询的 ORDER BY 时间不同【英文标题】:MYSQL: why does the ORDER BY time differ for the 2 almost identical queriesMYSQL:为什么两个几乎相同的查询的 ORDER BY 时间不同 【发布时间】:2011-12-02 17:36:10 【问题描述】:
SELECT *
FROM `resumes` AS r
LEFT JOIN seeker_data_cached AS c ON r.user_id = c.user_id
ORDER BY r.user_id

SELECT *
FROM `resumes` AS r
LEFT JOIN seeker_data_cached AS c ON r.user_id = c.user_id
ORDER BY c.user_id

r.user_id 和 c.user_id 被索引。为什么这些查询的执行时间差别很大,有什么办法可以加快第二次查询的速度?

【问题讨论】:

如果输出没有差异(看起来是这样),为什么不直接使用第一个呢? 比较两个查询的执行计划告诉你什么? @Benjam 这样我们就可以学习了。 @Wiseguy- 我同意,但如果 OP 正在寻找可用的解决方案,则必须提出问题。 表中不同的行数可能会影响时间 【参考方案1】:

mysql 文档包含a section on ORDER BY optimization,在靠近顶部的位置有一个项目符号列表,列出了当性能不符合您的预期时要检查的事项。因此,第一件事可能是通过该列表。

其中许多,我们可以根据您提供的信息排除,但其中许多涉及我们从您的问题中不知道但您可能知道的事情。

如果这没有帮助,请通过EXPLAIN 运行这两个查询,这可能会告诉您为什么一个的性能与另一个不同。

如果您将第二个查询中的ON r.user_id = c.user_id 更改为ON c.user_id = r.user_id,我会倾向于看看会发生什么情况获取的行与 ORDER BY 中使用的行不同。

【讨论】:

以上是关于MYSQL:为啥两个几乎相同的查询的 ORDER BY 时间不同的主要内容,如果未能解决你的问题,请参考以下文章

两个相似查询的巨大速度差异(MySQL ORDER 子句)

为啥在mysql中第一个union两个子句的order by不起作用

为啥 MySQL 查询在使用 LIMIT 和 Order BY 时会变慢?

添加 Limit 可以加快 mysql 查询速度,为啥?

mysql 查询关联表 左外查询 排除相同的部分

MySQL order by - 排序不正确