mysql索引優化思路(優化UCP的慢SQL總結)

2021-09-13 00:14:34 字數 1810 閱讀 2975

(1)能用唯一索引不要用普通索引,能用組合索引盡量不用單列索引。

(2)索引不會走包含有null的列,只要列中包含有null值,都將不會被包含在索引中,組合索引中只要有一列含有null值,那麼這一列對於此組合索引就是無效的。

(3)order by與group by後的字段需要結合where條件的字段建組合索引,並且order by的字段一般放在組合索引的最後才有效。

(4)查詢語句如果使用組合索引,組合索引的第乙個字段一定要在where條件中,否則該索引是不會走的。需保證組合索引的字段順序,若使用組合索引後面的字段,最好前面的字段也在where條件中,

否則即使mysql篩選器使ff用了該索引,該索引後面的字段也可能沒用到。

(5)查詢語句中包含時間範圍的時間欄位在組合索引的最後,因為只要是範圍的字段,組合索引後面的字段就沒用。

(6)如果查詢語句包含時間範圍的時間字段,為保證mysql篩選器能篩選到時間欄位的組合索引或能使用到組合索引裡的時間字段,

order by的字段盡量加上該時間字段,或者只要能保證不走order by的字段的單個索引也可。

(7)查詢語句中包含order by時,如果order by是主鍵欄位或單列索引字段,此時需注意mysql索引篩選器可能會按主鍵索引或單列索引查詢,導致全表掃瞄(type=index),cpu飆公升。

(8)若乙個表索引較多,為防止mysql篩選器選擇不必要的索引導致查詢較慢,可以指定索引進行查詢(force index強制使用索引、ignore index忽略某些索引),如無必要,盡量不要指定。

(9)乙個表的索引個數最好不要超過5~6個,每個索引都需要占用磁碟空間,索引越多,需要的磁碟空間就越大。

(10)使用短索引(提高查詢速度、節省磁碟空間和i/o操作):盡量使用字段資料量少的索引;大字段的索引,需使用字首索引,但最好不要在大字段上使用索引。

(11)乙個組合索引的字段數量不是越多越好,乙個查詢語句的組合條件會變,只要使用經常查詢的字段即可,

並且組合索引的字段在查詢語句中的值區分度越高越好,比如print_flag有0和1兩個值,但是0的值特別少,使用者大部分都是使用0來查詢。

(12)不鼓勵使用like操作,like 『%aaa%』不會使用索引,而like 『aaa%』可以使用索引。

(13)不使用not in 、<>、!=操作,但<,<=,=,>,>=,between,in是可以用到索引的。

(14)如果where字句的查詢條件裡使用了函式(如:where day(column)=…),mysql將無法使用索引。

(15)在join操作中(需要從多個資料表提取資料時),mysql只有在主鍵和外來鍵的資料型別相同時才能使用索引,否則及時建立了索引也不會使用。

mysql慢日誌分析工具

mysqldumpslow -t 10 ./slowquery.log --查詢時間最長的前10 sql語句

mysqldumpslow -s c -t 10 ./slowquery.log --訪問次數最多的前10 sql語句

mysqldumpslow -s r -t 10 ./slowquery.log --返回最多的前10 sql語句

如何通過 pt-query-digest 慢查詢日誌發現有問題的 sql

1)查詢次數多且每占用時間長的 sql

通常為 pt-query-digest 分析的前幾個查詢

2)io 消耗大的 sql

注意 pt-query-digest 分析中的 rows examine 項

3)為命中索引的 sql

注意 pt-query-digest 分析中 rows examine (掃瞄行數) 和 rows sent (傳送行數)的對比,如果掃瞄行數遠遠大於傳送行數,則說明索引命中率並不高。

mysql思路 MySQL優化思路

通過指令碼,重新整理觀察mysql的status,觀察是否有週期性故障活波動,一般由訪問高峰或者快取失效引起,家快取並更改快取失效策略,是失效時間分散或頁面定時失,show processlist顯示哪些執行緒正在執行。您也可以使用mysqladmin processlist語句得到此資訊。如果您有...

mysql優化思路

調優思路 1.資料庫設計與規劃 以後再修該很麻煩,估計資料量,使用什麼儲存引擎 2.資料的應用 怎樣取資料,sql語句的優化 3.mysql服務優化 記憶體的使用,磁碟的使用 4.作業系統的優化 核心 tcp連線數量 5.公升級硬體裝置 磁碟io規劃 raid技術 raid0 xfs swap分割槽...

mysql優化思路

為什麼別人問你mysql優化的知識 總是沒有底氣,因為你只是回答一些大而化之的調優原則,比如 1 建立合理索引 什麼樣的索引合理?2 分表分庫 用什麼策略分表分庫?3 主從分離 用什麼中介軟體?並沒有從細化到定量的層面去分析.如qps提高了 n?有沒有減少檔案排序?語句的掃瞄行數減少了多少?沒有大量...