目录
🌴概念
🌵作用
🌱使用场景
🎄使用
查看索引
创建索引
删除索引
🌴概念
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。
🌵作用
数据库中的索引,的目的就是为了加快查询的速度,select这样的查询操作,默认是按照"遍历"的方式,来完成查询的。比如,指定where语句,条件查询,遍历每一行,把这一行数据代入到条件中,看是否成立,成立就留下,不成立就pass掉。遍历,是O(N)级别的复杂的,注意,此处的每一次取一行,都是要读硬盘的!虽然也是O(N)和内存中的操作的O(N)是有本质区别的。
所谓的"索引”就相当于是在数据库中,构建一个特殊的"目录”(一系列特定的数据结构,硬盘)
通过这样的数据结构,加快查询的速度,尽可能避免针对表数据的遍历操作。
🔅数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
🔅索引所起的作用类似书籍目录,可用于快速定位、检索数据。
🔅索引对于提高数据库的性能有很大的帮助。
🌱使用场景
引入索引,是能够提高查询的速度,也会付出一些代价
1)引入索引,需要消耗额外的存储空间.
2)引入索引之后,确实能提高查询的效率,但是可能会影响到增删改的效率.
(有的时候增删改会更慢,有的时候会更快,有的时候,没啥变化)
索引,有利有弊,但是即使如此,实际开发中,还是比较鼓励使用索引的.
1)硬盘往往不是主要矛盾.
2)对于增删改也不一定都是负面影响,也可能会触发一些正面效果。另一方面,很多业务场景,查询的频率比增删改要高很多.
要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
⚫️数据量较大,且经常对这些列进行条件查询。
⚫️该数据库表的插入操作,及对这些列的修改操作频率较低。
⚫️索引会占用额外的磁盘空间。
满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。
🎄使用
查看索引
show index from 表名;
🌖案例:查看学生表已有的索引
创建索引
对于非主键、非唯一约束、非外键的字段,可以创建普通索引
create index 索引名 on 表名(列名);
🌖案例:创建班级表中,name字段的索引
🛑创建索引,也是一个"危险操作",如果是针对空表,或者表中的数据比较少(几干,几万…)创建索引,就谈不上危险不危险,一旦表的数据量比较大,干万级别,此时创建索引操作,就可能会触发大量的硬盘IO,直接把机器就搞的卡死住了。所以在最初建表的时候都要有哪些索引,提前规划好,创建好。
删除索引
drop index 索引名 on 表名;
☄️只能删除,咱们自己创建的索引,不能删除自动生成的
💢删除索引,也是危险操作,要能够慎重对待