3

How can I optimize this mysql query? I'm using the IN() operator, but I believe it's not the way to do it.

select * 
from users 
where usid NOT in 
(
select usid 
from images 
where status=0
) 
and us_status=0
ci_
  • 8,594
  • 10
  • 39
  • 63
  • [This question](http://stackoverflow.com/q/2246772/1048425) and more importantly [this link](http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/) in the accepted answer should help you out here. In summary, for MySQL use `LEFT JOIN/IS NULL` to remove matching records. – GarethD Sep 11 '15 at 09:04

3 Answers3

4

Using a 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

This avoids using IN which can perform poorly.

Kickstart
  • 21,403
  • 2
  • 21
  • 33
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
Cosmin
  • 1,482
  • 12
  • 26
0

You can use the following query :

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

Must read the article : http://www.w3schools.com/sql/sql_join.asp

Happy Coding
  • 2,517
  • 1
  • 13
  • 24