Mysql查询非常慢并且没有使用正确的索引(通过使用group by、IN运算符)

标签 mysql performance query-tuning

下面的查询执行时间超过 5 秒(表包含 1m+ 记录)。 外部查询没有使用正确的索引,它总是使用全表扫描来获取数据。有人可以帮助我如何优化它..

查询

SELECT x 
  FROM UserCardXref x 
 WHERE x.userCardXrefId IN(
    SELECT MAX(y.userCardXrefId) 
      FROM UserCardXref y 
     WHERE y.usrId IN(1001,1002) 
     GROUP 
        BY y.usrId 
    HAVING COUNT(*) > 0
    )

查询解释

enter image description here

查询统计

enter image description here

执行计划

enter image description here

最佳答案

我会将查询重写为

select x.* from UserCardXref x
join (
 select max(userCardXrefId),usrId from UserCardXref 
 where usrId in (1001,1002) group by usrId
)y on x.userCardXrefId = y.userCardXrefId

您需要的索引

alter table UserCardXref add index userCardXrefId_idx(userCardXrefId)

usrId 已根据解释计划建立索引,因此无需添加

此外,您已经having count(*)>0,您已经在使用 max() 函数,并且对于给定组,它永远不会有 0 行,因此我已将其删除。

关于Mysql查询非常慢并且没有使用正确的索引(通过使用group by、IN运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35079762/

相关文章:

MySQL:多个 SUMS 计算组合值 WHERE 条件

mysql - 1452 - 无法添加或更新子行 : a foreign key constraint fails

javascript - 如何提高大数据Angular Material应用程序在Internet Explorer中的性能?

css - rails 4 应用程序中有太多 css 文件的性能问题?

SQL查询理论问题

php - 通过外键获取 MySQL

android - 如何从 Android 应用程序通过 PHP 连接 MySQL 服务器?

performance - Golang slice 追加 vs 分配性能

mysql - 改进 WordPress 主题中的 MySQL Select 语句

sql-server - 调整查询以解析 SQL Server 2014 上的 XML 数据