2015-09-11 22 views
3

如何優化此mysql查詢?我正在使用IN()運算符,但我認爲這不是實現它的方法。我如何優化這個mysql查詢?我使用IN()運算符

select * 
from users 
where usid NOT in 
(
select usid 
from images 
where status=0 
) 
and us_status=0 
+0

[此問題](http://stackoverflow.com/q/2246772/1048425)更重要的是[此鏈接](http://explainextended.com/2009/09/18/not-in-vs- not-exists-vs-left-join-is-null-mysql /)在接受的答案中應該會幫助你。總之,對於MySQL,使用'LEFT JOIN/IS NULL'來移除匹配的記錄。 – GarethD

回答

4

使用LEFT OUTER JOIN

SELECT users.* 
FROM users 
LEFT OUTER JOIN images ON user.usid = images.usid AND images.status = 0 
WHERE images.usid IS NULL 
AND us_status = 0 

這避免了使用IN哪個行 表現不佳。

+0

非常感謝,只是相反,us_status必須是users.status是的? –

+0

您的原始查詢中有us_status。如果這是user.status的拼寫錯誤,請將其更改爲 – Kickstart

0
SELECT users.* 
FROM users 
LEFT JOIN images ON users.usid = images.usid AND images.status=1 AND images.usid IS NOT NULL 
WHERE users.us_status = 0 
+0

請再次閱讀問題,我忘了寫NOT操作符。 –

+0

@FəqanÇələbizadə編輯太 – Cosmin

0

您可以使用下面的查詢:

SELECT us.* 
FROM users as us 
INNER JOIN images as img ON us.usid = img.usid AND img.status=1 
WHERE us.us_status = 0 

必讀文章:http://www.w3schools.com/sql/sql_join.asp

+0

請再讀一遍問題,我忘了寫NOT操作符。 –