预习执行计划
实践
咱们先申明前置条件,创建表如下:
创建复合索引如下注意哦,索引使用的BTree:
我们先来一个提问,看如下两条sql,我们花5秒时间思考下,会走索引吗?...sql-1 根据code查询:
sql-2 根据name查询:
5
4
3
2
1
时间到...我们列举以上五条sql来验证,查询结果如下:
从上图很明显可以看出,where条件的顺序完全不影响索引的执行,但是很明显上面5条sql所有查询条件都是包含在复合索引内,那要是有查询条件不在符合索引内又是什么结果呢...这里发现不一样了,我们的复合索引顺序是name,code,createTime.
当出现非索引字段的查询条件时,只有包含了name的查询条件走了索引.这是为什么呢?...原来是因为我们用了B+树索引数据结构,它是按照从左到右的顺序建立索引,同时mysql查询优化器会优化sql语句,不管where条件顺序如何变化,都会按照索引左侧原则去优化(注意咯是按照索引的左侧,不是where