【问题标题】:ORDER BY NULL slower than ORDER BY columnORDER BY NULL 比 ORDER BY 列慢
【发布时间】:2011-07-22 12:04:09
【问题描述】:

根据MySQL documentation,在 GROUP BY 之后添加 ORDER BY NULL 应该“避免对结果进行排序的开销”。如果是这样,为什么跟踪查询会慢 5 倍

SELECT COUNT(*) advert_count, category.name
FROM advert
LEFT JOIN category ON advert.category_id = category.category_id
WHERE (
advert.state_id = 2
)
GROUP BY advert.category_id
ORDER BY NULL
LIMIT 5 

不是用ORDER BY advert_count查询吗?

SELECT COUNT(*) advert_count, category.name
FROM advert
LEFT JOIN category ON advert.category_id = category.category_id
WHERE (
advert.state_id = 2
)
GROUP BY advert.category_id
ORDER BY advert_count DESC
LIMIT 5 

来自 phpMyAdmin 分析:
第一个查询:

Sorting for group   -
Sorting result      0.000002
Sending data        12.069774

第二次查询:

Sorting for group   2.436986
Sorting result      0.000028
Sending data        0.000021

我对此感到困惑,谁能解释一下那里发生了什么?

【问题讨论】:

  • 你多久运行一次测试?
  • 我也很困惑。如我所见,第一个查询更快!?
  • 可能是索引的情况?如果解释这些查询,你会得到什么?
  • 有趣。可能advert_count 上有索引,加快了查询速度。愿意发布EXPLAIN 结果吗? (EXPLAIN SELECT ...)
  • @cularis 我已经尝试了至少 10 次,结果相同。

标签: mysql sql database-optimization


【解决方案1】:

ORDER BY NULL 根本没有订购任何东西。每条记录都获得相同的位置。

所以第一个查询是选择在数据中找到的前 5 个组。但第二个查询是计算数据中所有组的结果,并根据计数找到前 5 个。

这是由您展示的前两个间接费用得出的。


第三个开销是区别 - 发送数据。由于与数据库无关的原因,当您运行它时,传输数据需要很长时间。这可能是由于当时的服务器或网络负载造成的。

【讨论】:

  • 我也会这么说,但是我已经运行了 10 多次查询,结果相同,并且分析器显示的值非常相似,而且每次第二次查询都快得多。
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 2010-10-16
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2019-01-03
相关资源
最近更新 更多