2

运行以下效果很好:

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
)

这是什么原因造成的?

4

2 回答 2

1

我认为您需要的 join 语句是:

SELECT email FROM table1
INNER JOIN table2
ON table1.empNum=table2.empNum
AND table2.accomp = 'onhold'
于 2013-03-29T17:47:17.903 回答
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控制台
  2. 清除查询缓存(*):

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

  4. 创建索引
  5. 清除查询缓存
  6. 运行慢查询并记下时间
  7. 删除索引
  8. 创建另一个索引
  9. 清除缓存
  10. 再运行一次慢查询
  11. 比较时间并保持最佳索引(通过删除当前索引并在必要时创建正确的索引)

(*) 您需要相关权限才能运行该命令

于 2013-03-29T17:47:43.567 回答