如果我有以下兩個表:加快選取列條件在另一個表中存在沒有重複
- 表「一」與2列:ID(INT)[主索引],列1 [索引]
- 表 「b」 與3列:id_table_a(INT),條件1(INT),條件2(INT)[所有列作爲主索引]
我可以運行下面的查詢以從表A中選擇行其中表b條件1是1
SELECT a.id FROM a WHERE EXISTS (SELECT 1 FROM b WHERE b.id_table_a=a.id && condition1=1 LIMIT 1) ORDER BY a.column1 LIMIT 50
在這兩個表中有幾億行,這個查詢非常慢。如果我做的:
SELECT a.id FROM a INNER JOIN b ON a.id=b.id_table_a && b.condition1=1 ORDER BY a.column1 LIMIT 50
這是相當多的瞬間,但如果有表B多匹配的行匹配,則id_table_a返回重複這一點。如果我使用SELECT DISTINCT或GROUP BY a.id刪除重複項,查詢變得非常緩慢。
這裏是一個SQLFiddle顯示查詢示例:http://sqlfiddle.com/#!9/35eb9e/10
有沒有一種方法,使沒有重複在這種情況下,加入快?
*編輯,以顯示內心的,而不是LEFT JOIN沒有做編輯,以展示移動條件下加入一個差異
*的多少並沒有多大的差別
*編輯補充LIMIT
*編輯補充ORDER BY
從原始(快速)連接版本返回大約多少行? – Bohemian
對不起,我現在增加了LIMIT 50的問題。它應該從數以億計的行中返回50或任何小的限制。 – JJJ
是否需要'訂單'?有50個嗎? – Bohemian