索引
直接创建索引
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%' ;
全局
可用explain分析执行计划 查看是否使用索引