我有一个简单的SQL语句。某些LEFT JOIN未在结果集中使用。为什么MySQL 5.5会降低我的第二版SQL的执行速度,尽管JOIN与结果完全无关?为什么LEFT JOIN不被忽略?
执行时间:0.03秒(没有加入)
SELECT SQL_NO_CACHE count(o.orderid), o.orderid
FROM
customerorder o
LIMIT 0,20
执行时间:0.20秒(不相关的JOIN)
SELECT SQL_NO_CACHE count(o.orderid), o.orderid
FROM
customerorder o
LEFT JOIN object o1 ON o1.objectid = o.orderid
LEFT JOIN object o2 ON o2.objectid = o1.objectid
LEFT JOIN object o3 ON o3.objectid = o2.objectid
LEFT JOIN object o4 ON o4.objectid = o3.objectid
LEFT JOIN object o5 ON o5.objectid = o4.objectid
LIMIT 0,20
编辑/“解决方案”:它没有被忽略,因为JOIN是相关的:-)他们可以增加count()。因此,问题的解决方案是这样的:
SELECT SQL_NO_CACHE (select count(*) from customerorder) as count, o.orderid
FROM
customerorder o
left JOIN object o1 ON o1.objectid = o.orderid
left JOIN object o2 ON o2.objectid = o1.objectid
left JOIN object o3 ON o3.objectid = o2.objectid
left JOIN object o4 ON o4.objectid = o3.objectid
left JOIN object o5 ON o5.objectid = o4.objectid
LIMIT 0,20
答案 0 :(得分:0)
简单来说,查询优化器必须先执行所有连接,然后再询问是否需要它们。
注意:正如JNevill在下面雄辩地指出的那样,在执行过程中,某些RDBMS系统将首先解析查询,并根据查询的上下文整体评估数据检索机制。避免在下面过度简化事件执行。
执行顺序:
{{1}}