MySQL数据库索引

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库索引相关的知识,希望对你有一定的参考价值。

mysql数据库索引

1-索引简介
索引:是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。
一张表的一个字段可以添加一个索引,多个字段联合起来也可以添加一个索引,索引相当于一本书的目录,是为了缩小扫描范围而存在的一种机制。

先通过索引定位位置,做局部扫描,缩小扫描的范围,快速的查找。

MySQL查询通过两种方式:
1-全表扫描
2-根据索引检索

在MyQSL中索引也是需要排序的,并且这个排序和TreeSet底层数据结构相同,TreeSet底层是一个自平衡二叉树,在MySQL中索引是一个B+树的数据结构。

遵循做小右大的原则存放。

2-索引的实现原理

提醒1:在任何数据库中主键都会自动添加索引对象,id字段自动有索引。另外在MySQL中,如果一个字段有unique约束,也会自动添加索引对象。

提醒2:在任何数据库中,任何一张表的任何一条记录在硬盘的存储上都有一个硬盘的物理存储编号。

提醒3:在MySQL中,索引是一个单独的对象,不同的存储引擎下以不同的形式存在,在MyISAM存储引擎中,索引存储在一个.MYI文件中,在InnoDB存储引擎中,索引存储在一个名称叫做tablespace中,在memory存储引擎中,索引被存储在内存中。不管索引存储在哪里,都是以树的的形式存在。


一般什么条件下考虑给字段添加索引?
1-数据量庞大
2-该字段经常出现在where的后面,以条件的形式存在,也就是在字段经常被扫描
3-该字段很少的DML操作,因为DML操作后,索引又要需要进行重新排序。

注意:不要随意添加索引,因为索引也是需要维护的,索引过多会降低系统性能,建议通过主键查询或者unique约束的字段进行查询,效率是比较高的。

3-索引的创建和删除
创建索引语法:
create index 索引名 index on 表名(字段名);

删除索引语法:
drop index 索引名 index on 表名;

在MySQL中查询一个SQL语句是否使用了索引进行检索?
我们在SQL语句前加explain关键字,即可查看。

4-索引的失效
case1:
在模糊查询时候如果使用%开始,则不能通过索引查询,即索引失效。

case2:
使用or的时候,要保证or两边的条件字段都要有索引,如果其中一边的一个字段没有索引,那么另一个索引也会失效,因此一般也是不建议使用or,尽量少用or。

case3:
使用复合索引的时候,没有使用左侧的列进行查找,索引失效,复合索引就是多个字段联合起来,添加一个索引,即复合索引。

case4:
当where当中索引列参加了运算,索引失效。

case5:
在where中索引列使用了函数

5-索引的分类
索引是各种数据库的优化手段,索引在数据库中分了很多类。
单一索引:一个字段上添加索引
复合索引:两个或者多个字段添加索引。
主键索引:主键上添加索引。
唯一性索引:unique约束的字段上添加索引。

注:唯一性比较弱的字段添加索引作用不大。

以上是关于MySQL数据库索引的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据库怎么建索引?

mysql索引类型解释

mysql索引类型解释

mysql索引类型和索引方式

mysql索引类型都有哪些

mysql中,索引,主键,唯一索引,联合索引的区别是?对数据库的性能有啥影响?