1. 程式人生 > >MySQL進階(六)索引

MySQL進階(六)索引

索引的優點

(1)提供資料檢索效率

(2) 提高聚合函式效率

(3)提供排序效率

(4)使用覆蓋索引可以避免回表


索引建立的四個不要

(1)選擇性低的欄位一般不要建立索引(例如:性別sex、狀態status)
說明: 但是有特殊情況,比如如果表中有個欄位叫做 status,只有兩個值 0 ,1 ,區分度只有2夠低了吧。但是如果100W條資料中,0的值只有100條,並且0又是常用的查詢呢。顯然是要在status上建立索引了。

(2)很少查詢的列不要建立索引(專案初期要確定好)

(3)大資料型別欄位不要建立索引

(4)儘量避免不要使用NULL,應該指定列為NOT NULL(在MySQl中,含有空值的列很難進行查詢優化,它們會使得索引、索引的統計資訊及比較運算更加複雜。可以使用空字串代替空值)


使用不到索引的情況

(1)通過索引掃描的行記錄數超過全表的30%,優化器就不會走索引,而變成全表掃描。

(2)聯合索引中,第一個查詢條件不是最左索引列

(3)聯合索引中,第一個索引列使用範圍查詢,只能使用到部分索引,有ICP出現(範圍查詢是指<、=、<=、between and)。

(4)聯合索引中,第一個查詢條件不是最左字首列

(5)模糊查詢條件列最左以萬用字元 % 開始(可以考慮放到子查詢裡面)

(6)兩個單列索引,一個用於檢索,一個用於排序。這種情況下只能使用到一個索引。因為查詢語句中最多隻能使用一個索引,考慮建立聯合索引

(7)查詢欄位上面有索引,但是使用了函式運算


實用的MySQL命令

(1)update table_name set:欄位名=某值(where):更新表中某行資料
(2)show create table table_name\G:檢視建表語句
(3)desc table_name:查看錶結構
(4)show table status:獲取表基礎資訊
(5)show index from table_name :檢視當前表下索引的情況
(6)show full processlist:檢視資料庫當前連線的情況