標籤:
explain 可以查看sql語句的執行情況,可以看到每個條件掃描的行數,當系統內需要使用SQL查詢時,通過explain看下該語句的效能。
1.索引通常被用於提高WHERE條件的資料行匹配或者執行連接操作時匹配其它表的資料行的搜尋速度。所以我們選擇索引的列也通常選擇出現在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。
2.資料列的不同的值越多,索引效果越好。如果一個資料列只包含:0或者1兩個值的話,索引的用處就不大。
3.如果索引了多列,要遵守最左首碼法則。所謂最左前列,指的是查詢從索引的最左前列開始,並且不跳過索引中的列。譬如對:t1,t2,t3建立聯合索引的話,同時也是對t1和t1,t2建立了索引。但是如果單獨指定t2、t3、t1t3、t2t3的值的話,都會用不到索引。
4.盡量比較資料類型相同的資料列。例如,INT與BIGINT是不同的。CHAR(10)被認為是CHAR(10)或VARCHAR(10),但是與CHAR(12)或VARCHAR(12)不同。
5.索引列不應該作為運算式的一部分,即也不能在索引列上使用函數。
6.在使用LIKE時,盡量不要在開頭使用萬用字元
WHERE col_name LIKE ’%string%’
WHERE col_name LIKE ’abc%’
7.不要使用類型轉換。如果某個索引列是int型,而在查詢時,賦值為字元型,將使用不了索引。
SELECT * FROM mytbl WHERE num_col = 1;使用索引
SELECT * FROM mytbl WHERE num_col = ‘1’;沒有使用索引
8.在SELECT語句中可以使用STRAIGHT_JOIN關鍵字來重載最佳化器的選擇。left join時會選擇結果集較小的表作為基準表,如果排序條件為另一張表的欄位就有可能影響效率,STRAIGHT_JOIN可以指定順序串連。
9.當MySQL一旦估計檢查的行數可能會”太多”,範圍尋找最佳化將不會被使用。
10.盡量借用覆蓋索引,減少select * from …語句使用;
11.ORDER BY子句,盡量使用Index方式排序,避免使用FileSort方式排序;
12.慎用left join語句,避免建立暫存資料表 使用left join語句的時候,避免出現建立暫存資料表。盡量不要用left join,分而治之。非要使用的時候,要詢問自己是不是真要必須要使用。
mysql索引相關