2013-12-20 105 views
-2

我有兩個表像如何使這種SQL查詢更快

表1:

word id 
a 1 
a 2 
a 10 
c 20 
d 21 
e 30 

表2:

id1 id2 
1 20 
2 21 

現在,如果字= 'a'然後我需要找出'c''d'使用表1和表2: 我寫了一個查詢,它的工作但花費了太多時間,因爲表包含巨大的數據。

查詢:

SELECT word 
FROM table1 
WHERE id IN 
     (SELECT id2 FROM table2 
     WHERE id1 IN 
        (SELECT id FROM table1 WHERE word = 'a')) 

另一個查詢:

SELECT DISTINCT word FROM table1 WHERE id IN (SELECT id FROM table1 WHERE word = 'a') 
+0

你能不能告訴我們的查詢? – PeterRing

+0

你可以寫下你的查詢,看看什麼是緩慢的。 – gbejic

+1

向我們顯示一個代碼。此外,我建議將這樣的問題發佈到[codereview](http://codereview.stackexchange.com/)。 –

回答

2
SELECT T1.WORD 
FROM TABLE1 T1 
    INNER JOIN TABLE2 T2 ON T1.ID = T2.ID2 
    INNER JOIN TABLE1 T3 ON T2.ID1 = T3.ID 
WHERE T3.WORD = 'a' 

您應儘量避免使用嵌套SELECT S和使用JOIN S作爲儘可能。這是因爲在查詢內部執行語句的順序。

JOIN s總是在WHERE語句之前執行,通過這樣做,您正在過濾一個步驟。

如果JOIN s不能解決您的所有問題,則可以將條件放入您的WHERE子句中。

+0

非常感謝,它效果很好,請你看看我的另一個查詢我用第一個。 – android

+0

@android正確的方法是發佈關於此的另一個問題,在這裏給一個鏈接,然後我會回答。 –

+0

http://stackoverflow.com/questions/20701135/how-to-make-this-slow-query-faster – android

1

嘗試是這樣的,但是。檢查是否有索引你的ID的

select word 
from table1 where id in (
select table2.id2 
from Table1 inner join Table2 on id1 = Table1.id and Table1.word = 'a') 
+0

: - 非常感謝 – android

1

試試這個

SELECT word 
FROM table1 WHERE id IN(
         SELECT table2.id2 
         FROM Table1 INNER JOIN Table2 ON id1 = Table1.id AND Table1.word = 'a' 
         ) 
+0

: - 非常感謝 – android

1

酪氨酸這也...

SELECT t.word 
FROM table1 t 
     INNER JOIN Table2 ON t.id = id2 
     INNER JOIN table1 tt ON id1 = tt.id 
WHERE tt.word = 'a' 
+0

@android當你在選擇查詢中使用'In'那麼你的查詢性能總是下降。所以爲了提高你的表現,使用'Inner Join'。 –

+0

: - 非常感謝 – android