誰能告訴我我該怎麼寫SQL語句:MySQL的LEFT OUTER JOIN加快查詢
SELECT url_source_wp.url
FROM url_source_wp
WHERE url_source_wp.id NOT IN (
SELECT url_done_wp.url_source_wp
FROM url_done_wp
WHERE (url_done_wp.url_group = 4) AND (hash IS NULL)) LIMIT 50;
使用加入?
我想:
SELECT url_source_wp.url
FROM url_source_wp
LEFT OUTER JOIN url_done_wp ON url_source_wp.id = url_done_wp.url_source_wp
WHERE url_done_wp.url_group = 4 AND url_source_wp.hash is NULL LIMIT 50
但答覆的內容是不一樣的。
問題是第一個SQL非常慢。
慢查詢通常意味着缺乏(正確)的索引。在你的問題中添加'CREATE TABLE'語句,所以我們知道存在哪些索引。還有'EXPLAIN'輸出。你的第一個查詢看起來很好,寫得很好。 –
的確......在WoLpH的回答中,null-join(「查找一行使得不存在任何可能的連接」)通常比在MySQL中的子查詢更好,但給了合理的索引(例如'url_group') (獨立的)子查詢結果並不是很荒謬,我不會指望它會很慢* – bobince
子查詢可能導致數以百萬計的行。 – user2296949