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