什么是索引:

MySQL官方定义:帮助MySQL高效获取数据的数据结构。可以简单理解为排好序的快速查找数据结构,就是排序+查找两个功能

 

结论:数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样久可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

 

数据结构是什么:比如字典的目录,从A到Z按顺序排序,并按照每个字的拼音首字母归类到所属的字母(比如"索"归到S)。

再比如下图数据结构:

         第一阶:22小于34的归到左边,89大于34的归到右边

         第二阶:5小于22的归到左边,23大于22的归到右边,右边的77,91同理

索引纬度 索引位置是什么意思_数据结构

 

一般来说索引本身也很大,不能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上

 

平常说的索引,一般都是指B树索引结构组织的索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。除了B+树这种索引以为,还有哈希索引

 

索引的优劣势:

优势:

1.提高数据检索的效率,降低数据库的IO(读写)成本

2.通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

劣势:

1.索引占用空间。因为索引实际上是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的

2.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT,UPDATE和DELETE(删除影响不会太大)。

因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息

3.索引只是提高查询效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询。索引不是只创建一次就行的。

比如一个商城项目,需要通过商品不同的条件去做查询,这个月流行曲面屏手机,对屏幕类型这个字段的查询就比较多,要在该字段添加索引。

再下个月流行徕卡摄像头的手机而曲面屏没那么热门了,对摄像头类型这个字段的查询就比较多,屏幕类型这个字段查询减少了,就要在摄像头类型这个字段加索引,考虑把屏幕类型字段的索引去掉

 

注:参考网上的视频,加上自己理解写的。如果有哪些地方理解错误或者写的不对的,欢迎大神们补充