MySQL中的索引

MySQL中的索引:

1、什么是索引?有什么用?

索引就相当于一本书的目录,通过目录可以快速找到对应的资源。

在数据库方面,查询一张表的时候有两种检索方式:
第一种方式:全表扫描
第二种方式:根据索引检索(效率很高)

索引提高了检索效率的原理就是缩小了扫描的范围。

索引虽然可以提高效率,但是不能随意的添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护。是有维护成本的。比如,表中的数据经常被修改,这样就不适合添加索引,因为数据一旦修改,索引需要重新排序,进行维护。


添加索引是给某一个字段,或者某些字段添加索引。

例如sql语句:select ename, sal from emp where ename = ‘Smith’;
当ename字段上没有添加索引时,这条sql查询语句会对表中数据进行全表扫描,扫描ename字段中所有的值。
当ename字段上添加了索引时,这条sql语句会根据索引进行扫描,快速定位。


2、怎么创建索引对象?怎么删除索引对象?

创建索引对象:create index 索引名称 on 表名(字段名);
删除索引对象:drop index 索引名称 on 表名;


3、什么时候考虑给字段添加索引?(满足什么条件)

数据量庞大(根据客户需求,线上的环境)
该字段很少的DML操作(因为字段的修改,索引也要重新排序维护)
该字段经常出现在where子句中(根据哪个字段进行查询)


4、注意:主键和unique约束的字段自动会添加索引。
根据主键查询效率较高,尽量根据主键检索。


5、查看MySQL中语句的执行计划:
explain sal语句;

给某个字段添加索引:
create index 索引名 on 表名(字段名);

例如:给emp表中的月薪sal字段添加索引。
create index emp_sal_index on emp(sal);

6、索引底层采用的数据结构是:B+ Tree(左小右大,采用中序遍历)。

------------------------------------------

7、索引的实现原理
通过B+ Tree缩小扫描范围,底层索引进行了排序,并分区。
索引会携带数据及其物理地址,通过索引检索到数据之后,可以获取到对应的物理地址。
通过物理地址定位表中的数据,效率是最快的。

例如:
select * from emp where ename = ‘Smith’;
通过索引转换为:
select * from emp where 物理地址 = 0x1234;

MySQL中的索引_第1张图片


8、索引的分类

单一索引:给单个字段添加索引。
复合索引:给多个字段联合起来添加1个索引。
主键索引:主键上的字段会自动添加索引。
唯一索引:unique约束的字段会自动添加索引。


9、索引什么时候会失效?

例如:select * from emp where ename like ‘%A%’;

像这种模糊查询,第一个字符使用%匹配的,即使ename添加了索引,也无法获取其分区,无法定位到物理地址,索引失效。

你可能感兴趣的:(MySQL)