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:檢視資料庫當前連線的情況