【问题标题】:How can i optimize this mysql query ? i use IN() operator如何优化这个 mysql 查询?我使用 IN() 运算符
【发布时间】:2015-09-11 17:54:08
【问题描述】:

如何优化这个 mysql 查询?我正在使用IN() 运算符,但我相信这不是这样做的方法。

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

【问题讨论】:

  • This question 更重要的是接受的答案中的this link 应该可以帮助您。总之,对于 MySQL,使用LEFT JOIN/IS NULL 删除匹配记录。

标签: mysql sql optimization


【解决方案1】:

使用左外连接

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。

【讨论】:

  • 非常感谢,只是 us_status 必须是 users.status 是吗?
  • 您的原始查询中有 us_status。如果这是 user.status 的拼写错误,则将其更改为那个
【解决方案2】:

您可以使用以下查询:

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

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多