添加子查询后查询速度慢

时间:2013-03-29 17:35:10

标签: mysql

运行以下内容非常有用:

SELECT email FROM User WHERE empNum IN (126,513,74)

但是,使用以下内容需要很长时间才能回复(无错误)

SELECT email FROM table1 WHERE empNum IN (
   SELECT empNum FROM table2 WHERE accomp = 'onhold' GROUP BY empNum
)

造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

我认为您需要的连接语句是:

SELECT email FROM table1
INNER JOIN table2
ON table1.empNum=table2.empNum
AND table2.accomp = 'onhold'

答案 1 :(得分:1)

那个怎么样?

SELECT DISTINCT table1.email
FROM table1
INNER JOIN table2 USING(empNum)
WHERE table2.accomp = 'onhold'

如果您经常使用该查询,则应该在table2.accomp上创建一个索引:

CREATE INDEX accomp ON table2 (accomp);

或者

CREATE INDEX accomp ON table2 (empNum,accomp);

执行一些粗略(但决定性)的基准:

  1. 登录mysql console
  2. 清除查询缓存(*):

    RESET QUERY CACHE;
    
  3. 运行慢查询并记下时间

  4. 创建索引
  5. 清除查询缓存
  6. 运行慢查询并记下时间
  7. 删除索引
  8. 创建其他索引
  9. 清除缓存
  10. 再次运行慢速查询
  11. 比较时间并保持最佳指数(通过删除当前指数并在必要时创建正确指数)
  12. (*)您需要相关权限才能运行该命令