如何理解MySQL的索引?
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、什么是索引
索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
将数据进行排序整理的过程就称为索引
我们根据索引去查,提高效率
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
二、MySQL索引分类
markdown * 主键(约束)索引 主键约束+提高查询效率
- 唯一(约束)索引 唯一约束+提高查询效率
- 普通索引 仅提高查询效率
- 组合(联合)索引 多个字段组成索引 name age
- hash索引 根据key-value 效率非常高
- 全文索引 通过查找文本中的关键词,类似于搜索引擎
说明:我们创建表时就会指定逐渐和唯一约束,那么就相当于给表的字段添加了主键和唯一索引。
三、MySQL索引语法
3.1 创建索引
① 在已有表的字段上直接创建【了解】
说明:
- 如果在同一张表中创建多个索引,要保证索引名是不能重复的。
- 上述创建索引的方式比较麻烦,还需要指定索引名。
- 采用上述方式不能添加主键索引。
【准备创建表的SQL语句】
【给上述表的字段设置索引】
1.给name字段设置普通索引
2.给telephone字段设置唯一索引
设置好之后可以通过图形化工具查看设置的索引:
② 在已有表的字段上修改表时指定【了解】
【准备的创建表的SQL语句】
【给上述表的字段设置索引】
1.指定id为主键索引
2.指定name为普通索引
3. 指定telephone为唯一索引
设置好之后可以通过图形化工具查看设置的索引:
③ 创建表时指定【掌握】
3.2 查看索引
【查看student3表的索引信息】
结果:
3.3 删除索引
- 语法
【语法1】直接删除
【语法2】修改表时删除
- 练习
(1)删除student表的name普通索引
(2)删除student表的telephone唯一索引
四、千万表记录索引效果演示
使用之前创建好的user数据表中的千万条数据进行测试。注意user表中是没有索引的。
【1.先来测试没有索引情况下查询】
【2.给这2个字段添加索引】
说明:给表的字段添加索引时,底层通过排序方式进行关联组合。所以需要消耗一些时间,并且索引也会占硬盘空间。所以大家使用索引时还需要慎重。
没有添加索引之前,数据占硬盘空间大小:
按照如下方式给以下字段添加索引:
添加索引之后,数据占硬盘空间大小:
如果在多添加索引,那么占硬盘空间大小还会增加。如果表很复杂,索引加多的话,有可能比原来多几个G也是有可能的。
【3.再测试有索引情况下查询】
说明:通过以上结果可以看出有了索引之后,查询速度比之前快了几十倍。快的飞起。
五、索引的优缺点
优势
1) 类似于书籍的目录索引,提高数据检索的效率,降低数据库的IO成本。
2) 索引底层就是排序,通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
劣势
- 在数据库建立过程中,需花费较多的时间去建立并维护索引,特别是随着数据总量的增加,所花费的时间将不断递增。
- 在数据库中创建的索引需要占用一定的物理存储空间,这其中就包括数据表所占的数据空间以及所创建的每一个索引所占用的物理空间。
- 在对表中的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需要进行动态的维护,这给数据库的维护速度带来了一定的麻烦。
六、后续学习
有关索引后续呢,还有数据结构的学习>聚簇索引和非聚簇索引>hash索引>覆盖索引>索引的创建原则>避免索引失效>批量数据分页查询的优化方案等等内容。
还有一些高频面试题
【1】Hash索引和B+树所有有什么区别或者说优劣呢?
【2】在哪些情况下会发生针对该列创建了索引但是在查询的时候并没有使用呢(索引失效)?
【3】你知道mysql有哪些索引?
【4】创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
【5】联合索引是什么?为什么需要注意联合索引中的顺序?
【6】非聚簇索引一定会回表查询吗?
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |