重複值較高的列上創建了索引導致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秒。

 

--總結:不適宜創建的索引除了會給數據庫增加維護成本外,有時也會讓數據庫選擇錯誤的執行計劃,從而影響數據庫性能。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章