mysql使用中关于索引的一些测试
一、序
写在前面,本文都是我亲自测试的结果,我根据结果进行的总结,对于原理不甚了解,请大家参考,也希望懂的朋友在下面评论,告诉我原因。
二、举例表数据:
三、总结
1.最大的原则,mysql优化器会判断开销,选择开销最小的查询方式。
2.有索引不一定使用索引,当mysql判断where条件没有起到筛选作用时,即使该字段存在索引,也不会使用索引。
索引状态:此时type有索引
sql: explain extended select * from y_user where type >0;
结果:
但是,当我修改查询条件,
explain extended select * from y_user where type >1;
结果:
可以看到,使用了type索引。
3.当查询条件中有索引和没索引的条件同时存在时,不一定使用索引,同第2条
索引状态:此时type有索引,nation未加索引
sql: explain extended select * from y_user where type >0 and nation>0;
结果: 未使用任何索引
当然,修改条件,还是会使用索引type的
4.两个字段同时具有索引
索引状态:此时type有索引,nation有索引,同第2条。此外,修改查询条件,两个索引都有效时,选择过滤更多结果的索引。
5.组合索引,比如给type和nation建立组合索引,nation_type和type_nation,当两个字段都出现且都有效时,选择过滤更多的组合索引,比如nation条件比type过滤更多,就会选择nation_type。
此外,组合索引有一个最左前缀原则,也就是说如果组合索引为 a_b_c,那么查询时的只要出现了a或者a,b,或者abc都可以使用改组合索引。但是,不能没有a查询条件,也就是说最左前缀的意思是查询条件一定要包含
组合索引最左边的元素,而不是说查询条件必须按照组合索引的组合顺序进行查找。
6.如果有主键会优先使用主键,其次为唯一索引,再次为组合索引和普通索引。组合索引和普通索引没有先后。
7.以上所有,在查询过程中查询条件的顺序不影响索引的使用。
相关推荐
ribavnu 2020-11-16
moyekongling 2020-11-13
Ida 2020-09-16
liuweiq 2020-09-09
要啥自行车一把梭 2020-11-12
vitasfly 2020-11-12
康慧欣 2020-09-10
CoderToy 2020-11-16
emmm00 2020-11-17
王艺强 2020-11-17
bianruifeng 2020-11-16
wangshuangbao 2020-11-13
苏康申 2020-11-13
vivenwan 2020-11-13
云中舞步 2020-11-12
aydh 2020-11-12
kuwoyinlehe 2020-11-12
minerk 2020-11-12