索引是什么?
索引是数据库中一个或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构。能够理解为,索引是一本书的目录,若是想快速查找某个内容,能够根据索引(目录)快速的找到想要找到的内容。而没必要要扫描整个数据库。mysql
MySQL索引类型
索引的优缺点:
索引的使用方式:对数据进行频繁查询要创建索引,若是须要频繁更改数据不建议使用索引。sql
优势:数据库
缺点:数据结构
- 缺点就是更新数据时效率低,更新数据的同时也要更新索引。
- 索引须要占据物理空间和数据空间。
B+索引和hash索引
二者的区别:性能
- B+索引数据有序,范围查询
- Hash索引等值查询效率高,对于范围查询、排序及组合索引仍然效率不高。因为HASH的惟一及相似键值对的形式,很适合做为索引。HASH索引能够一次定位,不须要像树形索引那样逐层查找,所以具备极高的效率。可是,这种高效是有条件的,即只在“=”和“in”条件下高效
聚簇索引和非汇集索引
- 汇集索引:数据按索引顺序存储,中子节点存储真实的物理数据
- 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
- 非汇集索引:存储指向真正数据行的指针
- 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行。
索引的底层实现
三种树的区别:mysql索引
- 红黑树:红黑树进行增长或删除的时候,会进行频繁的调整,来保证红黑树的性质,会浪费时间
- B-树:b-树查询性能不稳定,查询结构高度不致,每一个结点保存指向真实数据的指针,相对比与B+数每一层每屋存储的元素更多,显得更高一些。
- B+数:b+数相比较于另外两种数,显得更矮更宽,查询层次更浅。更方便查询。
哪些状况下须要建立索引?
-
一、主键自动建立惟一索引指针
-
二、频繁做为查询条件的字段应该建立索引排序
-
三、查询中与其余表关联的字段,外键关系创建索引索引
-
四、where条件里用到的字段须要建立索引hash
-
五、最好建立组合索引
-
六、查询中排序的字段,排序字段若经过索引访问将大大提升排序速度
-
七、查询中涉及到统计和分组的字段
哪些状况不须要建立索引?
- 一、表记录过少的时候
- 二、常常增删改的表
- 三、包含许多重复内容的列
- 四、频繁更新的字段不适合建立索引