簡體   English   中英

MySql和subselect,為什么這么慢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM