2016-01-06 71 views
-1

我在MYSQL查詢中有一個非常奇怪的情況。運行2個SQL查詢separatedelly他們是VEEEERY快速,運行2個SQL查詢只有一個,這基本上是一樣的東西,是VIGHTS SLOW!SQL命令重載服務器

當我執行以下命令它返回從我的數據庫10分的結果,需要4秒時:

SELECT a.id FROM aaa a, bbb b WHERE (a.id = 'XXX') OR (a.id = b.id) GROUP BY a.id ASC 

下面的命令,這是與上述相同的,但沒有一個條件,則返回從我的數據庫1個結果並且需要0.003秒!

SELECT a.id FROM aaa a, bbb b WHERE (a.id = 'XXX') GROUP BY a.id ASC 

的命令下面返回從我的數據庫9分的結果和需要0.0025秒:

SELECT a.id FROM aaa a, bbb b WHERE (a.id = b.id) GROUP BY a.id ASC 

10 = 9 + 1所以一切正常。但爲什麼使用OR需要更多的時間?

+0

使用INNER JOIN代替選擇多個表格 – techspider

回答

0

我不知道MySQL,但我的猜測是,MySQL無法爲您的第一個查詢優化查詢計劃,因此做兩個表的笛卡爾積。

您可以通過兩種方式重寫查詢:

  1. 使用LEFT JOIN

    SELECT a.id 
    FROM aaa a, 
    LEFT JOIN bbb b ON a.id = b.id 
    WHERE a.id = 'XXX' OR b.id IS NOT NULL 
    GROUP BY a.id ASC 
    
  2. 使用嵌套查詢

    SELECT a.id 
    FROM aaa a 
    WHERE a.id = 'XXX' OR a.id IN(
        SELECT b.id FROM bbb b 
    ) 
    
+0

我試過你的1.,它需要太長的時間...我不知道爲什麼OR會產生這個問題......有沒有辦法執行這兩個查詢separeted並讓MYSQL加入返回的行? – Samul