【Mysql高级】【第八章 索引的创建和设计原则】

第八章 索引的创建和设计原则

  • 1.索引的声明和使用
    • 1.1 索引分类
    • 1.2 如何创建索引
      • 1.创建表的时候创建索引
        • 1.1 隐式创建索引
        • 1.2 显示创建索引
      • 2.在已经存在的表上创建索引
    • 1.3 删除索引
  • 2.Mysql8.0 索引新特性
    • 2.1 支持降序索引
    • 2.2 隐藏索引
  • 3. 索引的设计原则
    • 3.1 哪些情况适合创建索引
      • 1.字段的数值有唯一性限制
      • 2.频繁作为where查询条件的字段
      • 3.经常group by和order by的列
      • 4.update\delete语句中的where条件列
      • 5.distinct字段需要创建索引
      • 6.多表join时创建索引注意事项
      • 7.使用数据类型小的字段创建索引
      • 8. 使用字符串前缀创建索引
      • 9.对散列性高的字段建立索引
      • 10.使用最频繁的字段放在联合索引左侧
      • 11. 多个字段创建索引的情况下,联合索引更优
    • 3.2 索引数目不要太多
    • 3.3 不适合创建索引的7种情况
      • 1.where条件、group by、order by用不到的字段
      • 2.小表
      • 3. 有大量数据重复的字段
      • 4.经常更新的表
      • 5.不建议用无序值作索引
      • 6.删除不再使用或者很少使用的索引
      • 7.避免冗余和重复索引
    • 3.4 索引创建和设计小结

1.索引的声明和使用

https://www.bilibili.com/video/BV1iq4y1u7vj?p=128

1.1 索引分类

【Mysql高级】【第八章 索引的创建和设计原则】_第1张图片


按照功能逻辑分类:

在这里插入图片描述
【Mysql高级】【第八章 索引的创建和设计原则】_第2张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第3张图片
主键索引就是聚簇索引;
【Mysql高级】【第八章 索引的创建和设计原则】_第4张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第5张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第6张图片

1.2 如何创建索引

https://www.bilibili.com/video/BV1iq4y1u7vj?p=129
在这里插入图片描述

1.创建表的时候创建索引

1.1 隐式创建索引

【Mysql高级】【第八章 索引的创建和设计原则】_第7张图片

1.2 显示创建索引

【Mysql高级】【第八章 索引的创建和设计原则】_第8张图片

显示创建普通索引
【Mysql高级】【第八章 索引的创建和设计原则】_第9张图片

显示创建唯一索引
【Mysql高级】【第八章 索引的创建和设计原则】_第10张图片

显示创建主键索引
在这里插入图片描述

创建单列索引
【Mysql高级】【第八章 索引的创建和设计原则】_第11张图片

创建联合索引
【Mysql高级】【第八章 索引的创建和设计原则】_第12张图片

2.在已经存在的表上创建索引

【Mysql高级】【第八章 索引的创建和设计原则】_第13张图片
第二种方式:
【Mysql高级】【第八章 索引的创建和设计原则】_第14张图片


P130-删除索引和索引新特性:降序索引、隐藏索引


1.3 删除索引

删除索引第一种方式:

在这里插入图片描述


删除索引第二种方式:【Mysql高级】【第八章 索引的创建和设计原则】_第15张图片

删除联合索引中的某个字段
联合索引本来是:(book_id,book_name,info)
【Mysql高级】【第八章 索引的创建和设计原则】_第16张图片

在这里插入图片描述

2.Mysql8.0 索引新特性

2.1 支持降序索引

【Mysql高级】【第八章 索引的创建和设计原则】_第17张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第18张图片
这么建立索引的话:执行如下sql可以完全走索引

select * from ts1 order by a,b desc ;

2.2 隐藏索引

【Mysql高级】【第八章 索引的创建和设计原则】_第19张图片
创建隐藏索引方式1:
【Mysql高级】【第八章 索引的创建和设计原则】_第20张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第21张图片
创建隐藏索引方式2:
【Mysql高级】【第八章 索引的创建和设计原则】_第22张图片
切换索引可见状态:
在这里插入图片描述
了解部分:
在这里插入图片描述
在这里插入图片描述
【Mysql高级】【第八章 索引的创建和设计原则】_第23张图片


P131-适合创建索引的11种情况

3. 索引的设计原则

在这里插入图片描述
【Mysql高级】【第八章 索引的创建和设计原则】_第24张图片

3.1 哪些情况适合创建索引

1.字段的数值有唯一性限制

【Mysql高级】【第八章 索引的创建和设计原则】_第25张图片

2.频繁作为where查询条件的字段

在这里插入图片描述

测试1:没有添加索引
【Mysql高级】【第八章 索引的创建和设计原则】_第26张图片

测试2:添加索引
【Mysql高级】【第八章 索引的创建和设计原则】_第27张图片

3.经常group by和order by的列

【Mysql高级】【第八章 索引的创建和设计原则】_第28张图片
group_by :建立索引后,会根据该字段排序,所以会待在一起,分组就更快

仅group by或者order by

在这里插入图片描述

group by + order by

(1) 对group by字段和order by字段分别建立单列索引
【Mysql高级】【第八章 索引的创建和设计原则】_第29张图片
(2) 按顺序对group by字段和order by字段建立联合索引
【Mysql高级】【第八章 索引的创建和设计原则】_第30张图片
(3) 反序对group by字段和order by字段建立联合索引
【Mysql高级】【第八章 索引的创建和设计原则】_第31张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第32张图片
总结:
group by+order by的情况下,需要按照先后顺序对group by的字段和order by的字段建立联合索引;

4.update\delete语句中的where条件列

在这里插入图片描述
update
【Mysql高级】【第八章 索引的创建和设计原则】_第33张图片
delete
【Mysql高级】【第八章 索引的创建和设计原则】_第34张图片

P132

5.distinct字段需要创建索引

【Mysql高级】【第八章 索引的创建和设计原则】_第35张图片

6.多表join时创建索引注意事项

【Mysql高级】【第八章 索引的创建和设计原则】_第36张图片

7.使用数据类型小的字段创建索引

【Mysql高级】【第八章 索引的创建和设计原则】_第37张图片

8. 使用字符串前缀创建索引

【Mysql高级】【第八章 索引的创建和设计原则】_第38张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第39张图片
【Mysql高级】【第八章 索引的创建和设计原则】_第40张图片

9.对散列性高的字段建立索引

【Mysql高级】【第八章 索引的创建和设计原则】_第41张图片

10.使用最频繁的字段放在联合索引左侧

【Mysql高级】【第八章 索引的创建和设计原则】_第42张图片
如上图sql,建立联合索引时,常用的放在左边;不过会有优化器对and条件进行优化

11. 多个字段创建索引的情况下,联合索引更优

3.2 索引数目不要太多

【Mysql高级】【第八章 索引的创建和设计原则】_第43张图片

3.3 不适合创建索引的7种情况

1.where条件、group by、order by用不到的字段

【Mysql高级】【第八章 索引的创建和设计原则】_第44张图片

2.小表

在这里插入图片描述

3. 有大量数据重复的字段

【Mysql高级】【第八章 索引的创建和设计原则】_第45张图片
在这里插入图片描述

4.经常更新的表

【Mysql高级】【第八章 索引的创建和设计原则】_第46张图片

5.不建议用无序值作索引

在这里插入图片描述

6.删除不再使用或者很少使用的索引

在这里插入图片描述

7.避免冗余和重复索引

【Mysql高级】【第八章 索引的创建和设计原则】_第47张图片

【Mysql高级】【第八章 索引的创建和设计原则】_第48张图片

3.4 索引创建和设计小结

【Mysql高级】【第八章 索引的创建和设计原则】_第49张图片

你可能感兴趣的:(Mysql,mysql)