💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
## **索引概述** MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 ![](https://img.kancloud.cn/07/58/0758a9331077ebbc367ecb42fc8a2efd_973x319.png) 左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意*逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据。 <br> 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。索引是数据库中用来提高性能的最常用的工具。 ## **索引优劣势** ### **优势** 1.索引大大减小了服务器需要扫描的数据量,从而大大加快数据的检索速度,这也是创建索引的最主要的原因。 2.索引可以帮助服务器避免排序和创建临时表 3.索引可以将随机IO变成顺序IO 4.索引对于InnoDB(对索引支持行级锁)非常重要,因为它可以让查询锁更少的元组,提高了表访问并发性 5.关于InnoDB、索引和锁:InnoDB在二级索引上使用共享锁(读锁),但访问主键索引需要排他锁(写锁) 6.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 7.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 8.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 9.通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 ### **劣势** 1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加 2.索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大 3.对表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度 4.如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。 5.对于非常小的表,大部分情况下简单的全表扫描更高效;