一、索引
(1)什么是索引
索引index是帮助MySQL高效获取数据的一种数据结构。
可以看出,索引其实就是BTREE。
(2)创建索引
create index 索引名 on 表名(字段)
例如:
CREATE INDEX idx_blogurl ON blog_image(image_url)
(3)查看索引
show index from 表名
例如:
SHOW INDEX FROM blog_image
(4)删除索引
drop index 索引名 on 表名
例如:
DROP INDEX idx_blogurl ON blog_image
二、explain优化
使用explain可模拟优化器执行SQL查询语句,分析语句的性能。
id:表示select执行的顺序
select_type:表示查询的类型,simple简单查询,primary多层查询的最外层,subquery包含子查询,derived有临时表,union联合查询。
table:表
type:查询类型,最重要(system>const>eq_ref>ref>range>index>all)
possible_keys:可能出现的索引
key:使用的索引
key_len:多用于复合索引,值越大,精度越高,性能越差
ref:索引的值
rows:可能读取的行数
extra:其他,最好不要出现,using filesort,using temorary代表会出现文件排序和临时表,对性能影响很大。
三、索引失效
(1)左前缀法则,最左的不能没有,中间不能断,从哪里断,后面的索引就失效了。
例如:
craete index idx_abcd
查询时不从a开始,或中间有断开,就会全部失效或部分失效。
(2)不能有对索引列的任何操作
(3)条件之后全失效
(4)减少使用select *
(5)不等 isnull isnotnull 会失效
(6)除aa%外,like索引全失效
(7)or索引失效