Mysql索引以及使用索引注意事項

xm93cc發表於2020-09-27

直接建立索引

CREATE INDEX index_name ON table(column(length))

修改表結構的方式新增索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

建立表的時候同時建立索引

CREATE TABLE table (
id int(11) NOT NULL AUTO_INCREMENT ,
title char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
content text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
time int(10) NULL DEFAULT NULL ,
PRIMARY KEY (id),
INDEX index_name (title(length))
)

刪除索引

DROP INDEX index_name ON table

索引使用和注意事項

避免索引失效

1). 全值匹配,對索引中所有列都指定具體值。改情況下,索引生效,執行效率高。

2).最左字首法則 如果索引了多列,要遵守最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。

3).範圍查詢右邊的列,不能使用索引。

4).不要在索引列上進行運算操作,引將失效。

6).儘量使用覆蓋索引,避免select * 儘量使用覆蓋索引(只訪問索弓|的查詢(引列完全包含查詢列) ) , 減少select*。

查詢列超過索引列也會降低效率

7).用or分割開的條件,如果or前的條件中的列有索引,而後面的列中沒有索引,那麼涉及的索引都不會被用到。
示例, name欄位是索引列,而createtime不是索引列,中間是or進行連線是不走索引的:

8).以%開頭的Like模糊查詢,索引失效。如果僅僅是尾部模糊匹配,索引不會失效。如果是頭部模糊匹配,引失效。

9).如果MySQL評估使用索引比全表更慢。則不使用索引。

10).is NULL,is NOT NULL有時索引失效。

11). in走索引,not in索引失效。

12).單列索引和複合索引。儘量使用複合索引,而少使用單列索引。

檢視索引使用情況

show status like 'Handler_ read%' ;
當前會話
show global status like 'Handler. read%' ;
全域性

相關文章