[英]MySql and subselect, why is it so slow?
我在這里選擇:
select parent_id from sales_flat_order_status_history where status like '%whatever%' group by parent_id having count(parent_id) > 1
該查詢僅運行幾秒鍾。 現在,我想在另一個選擇中使用它,如下所示:
select increment_id from sales_flat_order where entity_id in(
select parent_id from sales_flat_order_status_history where status like '%whatever%' group by parent_id having count(parent_id) > 1)
這將永遠運行,因此我嘗試了一個一個地插入id:
select increment_id from sales_flat_order where entity_id in(329,523,756,761,763,984,1126,1400,1472,2593,3175,3594,3937,...)
它運行速度快,區別在哪里?如何使我的第一種方法更快地工作?
謝謝!
您的查詢要花很長時間才能運行,因為它正在執行子查詢並為sales_flat_order表的每一行進行查找。
加入可能會更快:
select increment_id
from sales_flat_order
inner join (select parent_id
from sales_flat_order_status_history
where status like '%whatever%'
group by parent_id having count(parent_id) > 1) Sub
on sales_flat_order.entity_id = Sub.parent_ID
這將強制子查詢僅執行一次
子查詢以foreach樣式處理(對於每一行都進行subselect)。
認為in (1,2,3)
不要在某些較舊版本的mysql中使用索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.