mysql 查询优化 ~ explain与索引失效
一 explain
? 1 掃描行數根據的是表的統計元數據
? 2 索引的元數據具體指的就是show index from查到的索引的區分度,索引的區分度越高越好
? 3 表的元數據是定期收集,所以可能不準確
? 4 如果感覺explain不準確,可以用analyze table t命令重新收集
? 5 元數據不準確的場景大多出現在大量刪除數據和插入數據場景,針對大表尤其如此
二 元數據收集
? 參數 innodb_stats_persistent=ON 默認會持久化到內存 默認打開
? 參數 innodb_stats_auto_recalc 這個參數控制著在表中行的數量改變超過10%的時候,是否重新收集統計信息 這個收集的動作是異步的,在執行完大的dml后,可能會過一段時間才重新收集統計信息 默認打開
? 參數 innodb_stats_persistent_sample_pages 采樣使用的頁數 默認20 1 調大可能使analyze命令緩慢,加重負擔 2調小可能使大量的執行計劃產生誤區,并不建議調整此值
三 mysql優化器選擇錯誤索引的方法
? 1 采用force index強制走某項索引,但是這可能導致一個問題,以后系統遷移或者索引名變更會導致問題
? 2 改寫sql語句,讓mysql優化器進行再次判斷,選擇正確的索引
? 3 直接刪除索引本身,讓mysql優化器無法選擇該索引
四 總結
?1 如果出現mysql執行計劃不準確的情況下,可以采用上述方式進行處理,一般情況下,出現索引判斷失誤的情況比較少
五 明顯失效的幾個場景
? ? 1 當range出現? row掃描為1 ROW時候? ?
? ? 2? 掃描的行數遠遠多于表本身的數據量
轉載于:https://www.cnblogs.com/danhuangpai/p/10095001.html
總結
以上是生活随笔為你收集整理的mysql 查询优化 ~ explain与索引失效的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【bzoj2006】【NOI2015】超
- 下一篇: 查询数据库基本信息