開發十年,就只剩下這套架構體系了! >>>
1.最左字首匹配原則,mysql會一直向右匹配直到遇到範圍查詢(>、
2.=和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式
3.盡量選擇區分度高的列作為索引,count(distinct col)/count(*),一般需要join的字段我們都要求是0.1以上,即平均1條掃瞄10條記錄
4.索引列不能參與計算;
5.盡量的擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可
0.先執行看看是否真的很慢,注意設定sql_no_cache
1.where條件單錶查,鎖定最小返回記錄表。這句話的意思是把查詢語句的where都應用到表中返回的記錄數最小的表開始查起,單錶每個字段分別查詢,看哪個欄位的區分度最高
2.explain檢視執行計畫,是否與1預期一致(從鎖定記錄較少的表開始查詢)
3.order by limit 形式的sql語句讓排序的表優先查
4.了解業務方使用場景
5.加索引時參照建索引的幾大原則
6.觀察結果,不符合預期繼續從0分析
mysql索引原理及慢查詢優化:
索引和慢查詢優化
01 為什麼要用索引 對於乙個應用來說,對資料庫的讀寫比例基本上是10 1,即讀多寫少 而且對於寫來說極少出現效能問題,大多數效能問題都是慢查詢 提到加速查,就必須用到索引 02 什麼是索引 索引就相當於書的目錄,是mysql中一種專門的資料結構,稱為key,索引的本質原理就是通過不斷地縮小查詢範圍...
MySQL索引原理與慢查詢優化
索引的目的在於提高查詢效率,可以模擬字典,如果要查 mysql 這個單詞,我們肯定需要定位到m字母,然後從下往下找到y字母,再找到剩下的sql。如果沒有索引,那麼你可能需要把所有單詞看一遍才能找到你想要的,如果我想找到m開頭的單詞呢?或者w開頭的單詞呢?是不是覺得如果沒有索引,這個事情根本無法完成?...
MySQL索引原理及慢查詢優化
通過不斷的縮小想要獲得資料的範圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是我們總是通過同一種查詢方式來鎖定資料。資料庫索引就是通過演算法提高查詢效率。磁碟io與預讀 考慮到磁碟io是非常高昂的操作,計算機作業系統做了一些優化,當一次io時,不光把當前磁碟位址的資料,而是把相鄰的資...