mysql 慢sql优化记录

最近在分析一条SQL,这条SQL执行时间去到2秒以上。SQL如下:

sql 复制代码
select
        count(d.id)   
    from
        t_msg d   
    where
        d.userid='12456'   
        and d.isread=0     
        AND d.msgnumber<> 'NEW-JCPT003'

表上索引有 idx_userid(userid),这条SQL是一条比较标准的统计SQL,涉及字段也少。

虽然表数据有一百多万,但加了索引,explain一下只扫描记录5w多,按道理耗时很少。仔细分析是查询语句中用到了非索引字段,如果能把语句中涉及到的字段都加入索引,这样SQL在执行中可以减少回表时间,回表时间在SQL执行中占比挺大的。

马上修改索引 idx_userid(userid,isread,msgnumber),执行一下只耗时0.5秒了。这里isread和msgnumber两列的值属于枚举类型,加入索引在查询时效果没那么大,而且msgnumber这里是<>,用不上索引。会有人认为对这两个字段加索引没意义,但如果从减少回表的角度考虑,加索引意义很大

后面又碰到一条类似的SQL

sql 复制代码
select
        count(*) as "ALL",
        sum(CASE 
            WHEN d.code='A' THEN 1 
            ELSE 0 
        END) AS "A",
        sum(CASE 
            WHEN d.code='B' THEN 1 
            ELSE 0 
        END) AS "B",
        sum(CASE 
            WHEN d.code='C' THEN 1 
            ELSE 0 
        END) AS "C",
        sum(CASE 
            WHEN d.code='D' THEN 1 
            ELSE 0 
        END) AS "D",
        sum(CASE 
            WHEN d.code='E' THEN 1 
            ELSE 0 
        END) AS "E",
        sum(CASE 
            WHEN d.code='F' THEN 1 
            ELSE 0 
        END) AS "F",
        sum(CASE 
            WHEN d.code='G' THEN 1 
            ELSE 0 
        END) AS "G"  
    FROM
        t_msg d
    WHERE
        1=1        
        AND d.msgitemnumber <> 'NEW-JCPT003'                    
        and d.userid='123456' limit 1

二话不说直接修改索引idx_userid(userid,isread,msgnumber,code) ,耗时也降到0.5秒以下了

相关推荐
AC赳赳老秦27 分钟前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
myzshare1 小时前
实战分享:我是如何用SSM框架开发出一个完整项目的
java·mysql·spring cloud·微信小程序
YMatrix 官方技术社区1 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录2 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong2 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
墨笔之风3 小时前
java后端根据双数据源进行不同的接口查询
java·开发语言·mysql·postgres
欧亚学术3 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客3 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海4 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache
LeenixP4 小时前
RK3576-Debian12删除userdata分区
linux·运维·服务器·数据库·debian·开发板