索引执行计划查看(explain)

1 SQL语句注意项(sql的失效)

1 like查询时,关键字以%,_开头的则索引失效(左原则)
2 or 查询时,左右两侧都要建立索引,如果只有一侧有索引,则索引无效.
3 如果是联合索引的话,单独使用索引查询时,使用左边的关键字索引是有效的,而右边的无效 index(field1,field2)
4 字符串类型的列,在使用where查询时必须加上单引号.

2、测试SQL语句

create table test_1 (
id int primary key auto_increment,
t1 varchar(100),
t2 varchar(100)
)engine=myisam;

insert into test_1 values
(null,'a','a'),
(null,'ab','ab'),
(null,'abc','abc'),
(null,'abcd','abcd');

数据插入成功之后观察


图片.png

3 索引的检索(where)

图片.png

使用explain观察索引的执行计划


图片.png

4 没有索引

图片.png

5 左原则,验证使用%-时索引的失效

  1. 给t1字段增加一个普通的索引
alter table test_1 add index t1(t1);
图片.png
  1. 增加索引之后正常的进行一次查询


    图片.png
  2. 使用like验证索引的失效


    图片.png

不正常的情况,使用在关键字的左边使用%

图片.png

图片.png

6 OR的使用

  1. 验证左边的字段有索引而右边的字段没有索引
图片.png
  1. 给t2这个字段也增加一个索引


    图片.png

7 组合(复合)索引

create table test_2 (
id int primary key auto_increment,
t1 varchar(100),
t2 varchar(100)
)engine=myisam;

insert into test_2 values
(null,'a','a'),
(null,'ab','ab'),
(null,'abc','abc'),
(null,'abcd','abcd');
图片.png

为test_2添加一个复合索引

图片.png
  1. 使用复合索引的查询:


    图片.png
  2. 验证使用t1字段时,看索引是否生效(t1是建立联合索引时左边的字段)


    图片.png
  3. 验证使用t2时,看索引是否生效’


    图片.png

总结:当建立复合索引时,索引右侧的字段单独使用时,索引是失效的.

8 索引覆盖的实现

就是每一个表中字段都建立了,索引,再次执行查询时,就不用去数据文件中查询,只要在索引文件中查询即可,满足条件.

9 如果where后面是字符串类型的数字时,那么就必须要加引号.

insert into test_1 values(null,'1234','12453');

图片.png
  1. 验证字符串型的数字不加引号,看索引是否有效


    图片.png
  2. 验证字符串型的数字添加引号是,索引的使用情况


    图片.png

总结:索引不是越多越好,因为每建立一个索引,索引文件就会变大,当这个文件比较大时,查询的速度依旧是很慢的.但是索引是我们知道的最方便最有效,最廉价的优化手段.

你可能感兴趣的:(索引执行计划查看(explain))