重复值较高的列上创建了索引导致cpu使用率较高问题处理

一 问题描述

今天上午发现有台生产环境服务器的cpu使用率在30%~50%左右,分析了下早晨8点到估值时刻之间的慢查询日志。

top1 SQL信息如下:

 执行计划如下:

感觉post表的rows扫描条数比较多,有点可疑。

看下该索引Cardinality,发现只有88,说明重复值比较高,不适合建索引。

 

二 优化方法-改成强制不走该索引或删除该索引

SELECT COUNT(DISTINCT u.id ) FROM `user` u
        INNER JOIN post p IGNORE INDEX(index_CompanyId)
        ON p.UserId = u.Id    
         
          AND (u.pingyin_name LIKE '%ihr%'
            OR u.email_head LIKE '%ihr%'
            OR u.Email LIKE '%ihr%')
                 
        WHERE
        p.IsHidden = 1 AND p.Type != 0
         
            AND p.CompanyId IN (
            SELECT
            UCOrganizationId
            FROM
            organization org
            WHERE
            org.IsDelete = 0 AND
            org.SuperiorId = '0000'
            ORDER BY
            Sort
            )

   改后sql后的执行计划如下:               

            

虽然user表没有走索引,但是执行时间由原来的2秒降为了0.5秒。

 

--总结:不适宜创建的索引除了会给数据库增加维护成本外,有时也会让数据库选择错误的执行计划,从而影响数据库性能。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值