MySQL 使用 IN 优化查询

标签 mysql performance

SELECT `listener` ,
SEC_TO_TIME( SUM( TIME_TO_SEC( `call_time` ) ) ) AS total_time,
COUNT( `listener` ) AS number
FROM calls
WHERE listened_date = '2013-05-09'
AND type in ('column1','column2')
AND id
IN ( SELECT id
FROM calls
GROUP BY CONCAT( name, ' ', when ) )
GROUP BY `listener`

此查询运行速度非常慢,导致其他查询无法同时运行。我怎样才能让这个打火机?

我认为 IN 会让速度变慢。在这种情况下有什么替代方案?

最佳答案

也许?:

SELECT c.`listener` ,
       SEC_TO_TIME(SUM(TIME_TO_SEC(c.`call_time`))) AS total_time,
       COUNT(c.`listener`) AS number
FROM calls c
WHERE c.listened_date = '2013-05-09'
  AND c.TYPE IN ('column1',
                 'column2')
  AND EXISTS (SELECT 0
              FROM calls c2
              WHERE c2.id = c.id)
GROUP BY c.`listener`

关于MySQL 使用 IN 优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16456975/

相关文章:

mysql - 一个图像表可以服务两个外部表?

python - 比较字符串与 Python : X in ['item1' , 'item2' ,...] vs. X == 'item1' ,X == 'item2' ,...?

performance - CharInSet 比 IN 慢很多,我应该修复 W1050 警告提示吗?

sql - MySQL 中 COUNT 的默认值

php - 怎么算没有。 mysql 中一列中的确切关键字出现次数

mysql - mysql创建临时表存储过程报错

objective-c - NSMutableArray 真的是堆栈或队列的良好后备存储吗?

PHP 不回显最后一行的文本

regex - 使用正则表达式过滤器在 MongoDB 中进行 Count() 查询 : slow performance

c# - 异步执行方法的最快方法?