阅读:73
目录
6.is null可以使用索引,is not null无法使用索引
MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度, 因此索引对查询的速度有着至关重要的影响。
大多数情况下都(默认)采用B+ 树来构建索引。只是空间列类型的索引使R- 树,并且MEMORY 表还支持hash 索引。其实,用不用索引最终都是优化器说了算。
优化器是基于什么的优化器? 基于cost开销(CostBaseOptimizer) ,它不是基于规则( Rule-BasedOptimizer),也不是基于语义。怎么样开销小就怎么来。另外, SQL 语句是否使用索引,跟数据库版本、数据量、数据选择度都有关系。
拓展: Alibaba 《Java 开发手册》索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。
如果此时再插入一条主键值为 9 的记录,那它插入的位置就如下图:
#创建一个联合索引, 注意字段的顺序create index idx_age_classid_name on student(age,classid,name);#执行计划EXPLAIN SELECT SQL_NO_CACHE * FROM studentWHERE student .age = 30 AND student .classId > 20 AND student .name = 'abc' ;
#再创建一个联合索引,与上面的索引对比字段顺序变了
create index idx_age_name_classid on student(age,name,classid);
#再执行一模一样的执行计划
EXPLAIN SELECT SQL_NO_CACHE * FROM studentWHERE student .age = 30 AND student .classId > 20 AND student .name = 'abc' ;
看到两个执行计划虽然都用到了索引,但是:
拓展: Alibaba 《Java 开发手册》【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。
以上知识来源于“尚硅谷”,宋红康老师的《MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!》系列课程。
所以本文章看不懂的卷王们可以去搜索宋红康老师的mysql系列课程。