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');
数据插入成功之后观察
3 索引的检索(where)
使用explain观察索引的执行计划
4 没有索引
5 左原则,验证使用%-时索引的失效
- 给t1字段增加一个普通的索引
alter table test_1 add index t1(t1);
-
增加索引之后正常的进行一次查询
-
使用like验证索引的失效
不正常的情况,使用在关键字的左边使用%
6 OR的使用
- 验证左边的字段有索引而右边的字段没有索引
-
给t2这个字段也增加一个索引
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');
为test_2添加一个复合索引
-
使用复合索引的查询:
-
验证使用t1字段时,看索引是否生效(t1是建立联合索引时左边的字段)
-
验证使用t2时,看索引是否生效’
总结:当建立复合索引时,索引右侧的字段单独使用时,索引是失效的.
8 索引覆盖的实现
就是每一个表中字段都建立了,索引,再次执行查询时,就不用去数据文件中查询,只要在索引文件中查询即可,满足条件.
9 如果where后面是字符串类型的数字时,那么就必须要加引号.
insert into test_1 values(null,'1234','12453');
-
验证字符串型的数字不加引号,看索引是否有效
-
验证字符串型的数字添加引号是,索引的使用情况
总结:索引不是越多越好,因为每建立一个索引,索引文件就会变大,当这个文件比较大时,查询的速度依旧是很慢的.但是索引是我们知道的最方便最有效,最廉价的优化手段.