根据MySQL documentation,在GROUP BY之后添加ORDER BY NULL应该“避免排序结果的开销”。如果是这样,为什么跟随查询aprox慢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 profiling:
第一个查询:
Sorting for group -
Sorting result 0.000002
Sending data 12.069774
第二次查询:
Sorting for group 2.436986
Sorting result 0.000028
Sending data 0.000021
我对此感到困惑,有人能解释我那里发生了什么吗?
答案 0 :(得分:2)
ORDER BY NULL
根本没有订购任何东西。每条记录都有相同的位置。
因此,第一个查询是选择数据中找到的前5个组。但第二个查询是计算数据中所有组的结果,并根据计数找到前5个。
这是由你展示的前两个开销所产生的。
第三个开销是差异 - 发送数据。对于非数据库相关的原因,当您运行它时,传输数据需要很长时间。这可能是由于当时服务器或网络负载造成的。