mysql實戰45講學習筆記--10

10.mysql爲什麼有時候會選錯索引

        選擇索引是優化器的工作
        優化器選擇索引的目的找到最優解,最小代價執行語句。
        1.掃描行數是影響執行代價的因素之一,掃描行數越少,以爲着訪問磁盤數據次數越小,消耗CPU資源越少,還會結合臨時表,排序綜合判斷。
        2.行數判斷只能通過統計信息來估算記錄數,這統計信息就是索引的“區分度”,一個索引上不同的值越多,區分度越好,不同的值個數稱爲基數,基數越大,索引區分度越好,可以使用show index查看索引基數,
        3.得到索引基數是採用採樣統計,InnoDB默認選擇N個數據頁,統計不同值,得到平均值,然後乘以索引頁面數,得到這索引基數。
        學習命令analyze,可以解決很多問題。

        索引選擇異常處理
        採用force index 強行選擇一個索引
        還可以考慮修改語句,引導mysql使用期望的索引,
        在有些場景,可以新建一個更合適的索引,來提供給優化器做選擇,或者刪掉誤用的索引。

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