2012-12-03 58 views
0

我想獲取用戶未見過的前10個問題。 爲了做到這一點,我需要存儲已經由用戶看到到一個表的問題,一個名爲user_questions優化不到左外連接

所以,我的查詢現在是:

SELECT * from questions WHERE questions.id NOT IN (select question_id from user_questions where user_id=1) LIMIT 0, 10

根據我所瞭解到,與類似的連接查詢相比,此查詢應該較慢。我怎麼能構建一個連接查詢產生相同的結果?

回答

3

等效連接查詢的是:

select q.* 
from questions q left outer join 
    user_questions uq 
    on uq.question_id = q.id and 
     uq.user_id = 1 
where uq.user_id is null 
limit 0, 30 

有一點要注意,雖然結果不會在隨機順序。通常使用limit子句,您還可以指定order by

+0

只想詢問一下你的經驗:你認爲'NOT IN'會更快,或者'LEFT OUTER JOIN'會更快,因爲每個表有20000行(questions and user_questions)? –