赞
踩
1. 参数类型错误
例1:id为varchar类型可以使用索引
例2:id为varchar类型,实际使用数字类型,不能使用索引
例3:age为bigint类型,可以使用索引
例4:age为bigint类型,实际使用字符串类型,可以使用索引
结论:
数字类型的可以使用字符串类型,字符串类型的不能使用数据类型
2.范围查询,搜索引擎会评估,如果全表扫描的效率比走索引快,就不走索引,直接进行全表扫描
例1:num被索引,引擎评估走索引效率高,走索引
例2:num被索引,引擎评估走全表扫描效率高,直接进行全表扫描
结论:
1) 对于范围查询,当全表查询的效率高于走索引时,就会使用全表扫描
2) 字符串类型同样使用1) 规则
3. like操作符
例1:city_name有索引,右模糊匹配,可以使用索引
例2:city_name有索引,左模糊匹配,不能使用索引
例3:city_name有索引,左模糊匹配,只查询索引字段,可以使用索引
例4:city_name,age为复合索引,左模糊匹配,只查询索引字段,可以使用索引
注意:从这个例子可以知道,如果需求就是要求要左模糊匹配,可以用两种解决方法:
1) 添加复合索引,例如例4中,根据city_name查询age,不过这种要额外的加索引,
如果要加的复合索引不多,这种方法可以用
2) 先通过模糊查询查询出id,然后再通过id查询所需字段,这种不需要额外添加索引,应用场景比较多
4. !=, <>
age字段有索引,表中有8条数据,其中一条数据age是22,其余都是2
结论:<> 与 !=测试结果一样,从上面两个例子中可以知道:
1). 当结果数据集占总数据量比重较小时,!=和<>都可以使用索引
2). 当结果数据集占总数据量比重较大时,!=和<>都不能使用索引
实际业务中这种情况比较多,所以还是尽量少用不等于操作符
3). 对于字符串类型,!=和<>都不能使用索引
5. is null / is not null
例1:num字段加索引,表中有8条数据,其中2条数据num不为空
例2:num字段加索引,表中有8条数据,其中2条数据num为空
结论:从上面两个例子中可以知道:
1). 当结果数据集占总数据量比重较小时,is null和is not null都可以使用索引
2). 当结果数据集占总数据量比重较大时,is null和is not null都不能使用索引
6. in / not in
例2:num字段加索引,表中有8条数据,其中1条数据num为2,其它都是1
结论:从上面例子中可以知道:
1). 当结果数据集占总数据量比重较小时,in和not in 都可以使用索引
2). 当结果数据集占总数据量比重较大时,in和not in 都不能使用索引
3). 对于字符串类型,in和not in 都不能使用索引
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。