MySQL索引操作
創建索引
1.主鍵索引
主鍵也是一種索引(其實索引也是一種key)
2.創建索引語法
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_name,...); # 其中 index_col_name: # col_name [(length)] [ASC | DESC]
例子
create index book_name_key on book (name); # 普通索引
3.查看表的索引
show index from book; # 或者 show key from book;
4.使用索引后的性能分析(explain)
explain select * from book where name="The Ruby Programming" # 會發現key列多了索引名,表示使用了索引
5.刪除索引
drop index index_name on table_name; alter table table_name drop primary key;
使用場景
-
索引通常被用于提高WHERE條件的數據行匹配或者執行聯結操作時匹配其它表的數據行的搜索速度。所以我們選擇索引的列也通常選擇出現在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。
-
索引較短的值,所選擇的數據類型也盡可能的要小一些。譬如:如果TEXT能滿足需求的話,我們就不需要用MEDIUTEXT。
-
如果建立聯合索引的話,譬如對:t1,t2,t3建立聯合索引的話,同時也是對t1和t1,t2建立了索引。但是如果單獨指定t2、t3、t1t3、t2t3的值的話,都會用不到索引。
-
盡量比較數據類型相同的數據列。例如,INT與BIGINT是不同的。CHAR(10)被認為是CHAR(10)或VARCHAR(10),但是與CHAR(12)或VARCHAR(12)不同。
-
盡量不要在where子句中對索引列使用表達式或者函數。如果你在索引列使用函數調用或者更復雜的算術表達式,MySQL就不會使用索引,因為它必須計算出每個數據行的表達式值。
WHERE mycol < 4 / 2 使用了索引
WHERE mycol * 2 < 4 沒有使用索引
-
在使用LIKE時,盡量不要在開頭使用通配符。
WHERE col_name LIKE '%string%' -- ng
WHERE col_name LIKE 'abc%' --ok
-
大多數數據庫都索引自動創建的主鍵字段,但是可別忘了索引外鍵,它們也是經常使用的鍵,比如運行查詢顯示主表和所有關聯表的某條記錄就用得上。大多數數據庫都索引自動創建的主鍵字段,但是可別忘了索引外鍵,它們也是經常使用的鍵,比如運行查詢顯示主表和所有關聯表的某條記錄就用得上。
-
不要索引blob/text等字段,不要索引大型字段(有很多字符),這樣作會讓索引占用太多的存儲空間。