索引設計使用原則
為了提升數據檢索速度,降低查詢延時和IO消耗,在建表或者編寫SQL語句時,應該首先設計及檢查索引和數據分布情況,下面是常見的索引設計或使用原則:
盡量選擇惟一性索引;
為經常需要排序、分組和聯合操作的字段建立索引;
為常作為查詢條件的字段建立索引;
限制索引的數目,索引越多,更新和插入的效率越低;
盡量使用數據量少的索引;
組合索引中的盡量把能過濾掉更多數據的字段放在前面;
盡量使用前綴來索引,針對長文本,TEXT等類型;
刪除不再使用或者很少使用的索引;
數據是動態變化中的,索引的使用也需要根據數據的變化而變化。
show processlist 命令
輸入show processlist命令后可以看到數據庫中所有連接中的session,以及相應SQL的執行情況,如下圖所示:
其中:
id是session id,可以使用kill xxxx 的方式來殺死session;
user,host,db是session操作的用戶,主機和數據庫;
command是命令類型;
info是詳細的SQL語句;
time是相應命令執行時間;
state是命令執行狀態。
這里面最重要的是time和state,大部分狀態對應很快的操作,只要有一個線程保持同一個狀態好幾秒鐘,那么可能是有問題發生了,需要檢查一下。
而根據state可以判斷執行慢的問題在哪里,相應state含義對照表見下表。
Explain 命令
在所執行的SQL前加explain命令,即可查看相應SQL的執行計劃,例如一個很簡單的like查詢,是否使用了索引,可以通過possible_keys和rows很容易能看出來。
對于一個復雜的SQL來說,往往explain會有多行數據,相關列字段見:https://www.cnblogs.com/xiaoboluo768/p/5400990.html
索引設計及使用規范
建表時,就要根據規劃中不同表的用途和查詢方式建立合適的索引;
編寫SQL時,要清楚的知道表都有哪些索引,如何才能最大化的利用索引查詢,降低查詢速度,尤其是數據量超大(超過100萬條),或者需要進行多表關聯時,本條規則就尤其重要;
SQL編寫后,要養成使用explain命令查看索引使用情況的習慣,避免一些本應該使用索引的SQL并沒有使用索引,或者因為數據問題,使用索引可能還沒有不用來的快;
定時查看數據庫執行情況,使用show processlist或者開啟慢查詢,查看慢查詢日志,分析執行效率低的SQL;
當發生數據查詢慢,或者數據庫IO開銷很高的情況,要學會使用show processlist或show full processlist命令查看數據庫當前在做什么,哪些SQL執行慢,問題出現在哪里,等等。