概述
08、索引
1、什么是索引?
索引就相当于一本书的目录,通过目录可以快速找到对应的资源。
在数据库,查询一张表的时候有两种检索方式:
(1)全表扫描
(2)根据索引扫描(效率很高)
索引为什么可以提高检索效率呢?
根本原理是缩小了扫描的范围。
注意:
- 索引虽然可以提高检索效率,但是不能随便添加索引
- 因为索引也是数据库当中的对象,也需要数据库不断的维护,是有维护成本的。
- 如果表中数据经常被修改,就不适合使用索引,因为表中数据一旦修改,索引需要重新排序,进行维护
2、什么时候考虑给字段添加索引?
- 数据量庞大(根据客户的需求,根据线上的环境)
- 该字段的DML语句很少(因为字段进行修改操作,索引也需要维护)
- 该字段经常出现在where子句中(经常根据那个字段查询)
3、注意
主键和具有unique约束的字段会自动添加索引
根据主键查询效率高,尽量使用主键查询
4、查看sql语句的执行情况
mysql> explain select ename ,sal from emp where sal = 5000;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | emp | NULL | ALL | NULL | NULL | NULL | NULL | 14 | 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
5、如何创建索引
语法:
创建索引:
create index 索引名称 on 表名(字段名);
删除索引:
drop index 索引名称 on 表名;
查看sql语句执行情况
mysql> create index emp_sal_index on emp(sal);
mysql> explain select ename ,sal from emp where sal = 5000;
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | emp | NULL | ref | emp_sal_index | emp_sal_index | 9 | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+
mysql> drop index emp_sal_index on emp;
mysql> explain select ename ,sal from emp where sal = 5000;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | emp | NULL | ALL | NULL | NULL | NULL | NULL | 14 | 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
6、索引的底层结构
底层的数据结构:B+Tree
7、索引的原理
通过B Tree缩小扫描范围,底层索引进行了排序、分区,索引会携带数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位到表中的数据,效率得到提高。
select ename from emp where ename = ‘SMITH’;
通过索引转换为:
select ename from emp where 物理地址 = 0x3;
8、索引的分类
- 单一索引
- 给单个字段添加索引
- 复合索引
- 给多个字段联合起来添加1个索引
- 唯一索引
- 有unique约束的字段会自动添加索引
9、索引什么时候失效
select ename from emp ename like '%A%';
模糊查询的时候,第一个通配符使用的%,这个时候索引是失效的,只能全表查询。
最后
以上就是单身跳跳糖为你收集整理的08、索引08、索引的全部内容,希望文章能够帮你解决08、索引08、索引所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复