簡體   English   中英

使用NOT IN語句的SQL查詢優化

[英]SQL Query Optimization with NOT IN statement

請幫我優化這個查詢:

$result = mysql_query('
SELECT DISTINCT caseNumber 
FROM master_break 
WHERE invoiceNumber='$invoice' 
AND bay='$bay' AND  caseNumber 
NOT IN( SELECT DISTINCT caseNumber 
        FROM shipped_data 
        WHERE status='' AND bay='$bay') 
        ORDER BY caseNumber ASC");

謝謝。

DISTINCT意味着對於添加到結果集的每條記錄,MySQL必須在添加記錄之前檢查整個集合是否存在。 這意味着它有一個O(n ^ 2)要插入。 IN子句中使用它時,這可能意味着您要為零利益添加更多的工作。 試試這個:

SELECT DISTINCT caseNumber 
FROM master_break 
WHERE invoiceNumber='$invoice' 
AND bay='$bay' 
AND caseNumber NOT IN( 
     SELECT caseNumber 
     FROM shipped_data 
     WHERE status='' AND bay='$bay') 
ORDER BY caseNumber ASC

顯然,在shipping_data上索引caseNumber,並在兩者上都有bay。

SELECT DISTINCT caseNumber
FROM master_break
LEFT JOIN shipped_data ON master_break.caseNumber = shipped_data.caseNumber
WHERE invoiceNumber='$invoice'
  AND master_break.bay='$bay'
  AND shipped_data.status !=''
  AND shipped_data.bay !='$bay'
ORDER BY caseNumber ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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