【发布时间】:2011-07-24 03:56:12
【问题描述】:
我正在尝试加快查询速度:
SELECT order.id
FROM (
SELECT o.id
FROM `order` as `o`
INNER JOIN order_item as oi on
oi.order_id = o.id
AND `o`.`canceled` = 0
AND ( `o`.`return_date` > "2011-03-14" OR oi.checked = 0 OR '2011-03-14' < oi.last_update)
) as `order`
时钟为 0.0930 秒。子查询 (SELECT * FROM order as o...) 在它自己的时钟上为 0.0005 秒。我正在测试的表大约有 10000 行,其中 43 行从子查询 where 子句返回。
除了加快查询速度之外,如果有人能向我解释为什么当我将它包装在另一个查询中时查询会变慢 100 倍以上,我真的很高兴?
MySql 解释告诉我它自己的子查询首先选择o,然后选择oi。 MySql 解释整个查询首先选择(什么是derived2?),然后依次选择o 和oi。
我希望子查询成为子查询,因为我正在执行很多不在 where 子句中的连接(我已将其从代码和基准测试中排除)。如果我自己使用子查询和连接,查询会更慢。
任何帮助将不胜感激。我已经搜索了答案但找不到答案,这可能只是因为我不知道要寻找什么,如果是这样,我深表歉意。
【问题讨论】: