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秒以下了

相关推荐
geovindu3 小时前
sql:SQL Pagination and Limiting Results using PorstgreSQL 18.0
大数据·数据仓库·sql·postgresql·数据库开发·数据库架构·1024程序员节
不脱发的程序猿4 小时前
纳指ETF量化策略
数据库·人工智能·1024程序员节
程序员塔塔喵5 小时前
【MySQL篇|第一篇】索引失效的情况
数据库·mysql·索引失效
paopaokaka_luck5 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
北京青蓝智慧马老师5 小时前
比外部黑客更难防的,是那个有权限的自己人(3 个脱敏复盘)
大数据·数据库·人工智能
笃行3506 小时前
拆一台数据集成产品:KFS 的骨架、肌肉和神经
数据库
4SAPI6 小时前
搭建 AI 数据分析工具大模型 API 选型指南
数据库·人工智能·架构·php·1024程序员节
paopaokaka_luck7 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
码士集团小青8 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
2301_32241428048 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis