索引索引(记录,不断更新..) 索引相当于一本书的目录,通过目录可以快速地对应相对的资源。在数据库方面,查询一张表的时候有两种检索方式: 全表扫描 根据索引检索(效率很
索引相当于一本书的目录,通过目录可以快速地对应相对的资源。在数据库方面,查询一张表的时候有两种检索方式:
- 全表扫描
- 根据索引检索(效率很高)
索引虽然可以提高检索的效率,但是在决定是否添加主键还是要仔细分析情况,不能随意添加,例如:当数据量较小时就不必添加索引,因为索引也是数据库的对象,需要数据库不断维护。是有维护成本的。还有当数据库中的数据需要频繁改动时就不适合加索引,因为一旦数据发生改动,索引也需要做对应的修改,进行维护。
添加索引是给某个字段,或者某些字段添加索引。
创建索引:create index 索引名 on 表名(字段名);
删除索引
drop index 索引名 on 表名;
什么时候考虑添加索引
- 当数据量庞大时。
- 该字段很少的DML操作。
- 该字段经常出现在where 语句之后。
主键具有unique约束字段的会自动添加索引,所以主键的查询效率较高,尽量根据主键检索。
查看sql语句的执行计划!!??
索引的底层实现索引底层使用B +Tree实现
原理通过B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,
最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率
是最高的。
select ename from emp where ename = 'SMITH';
通过索引转换为:
select ename from emp where 物理地址 = 0x3;
单一索引:给单个字段添加索引
复合索引: 给多个字段联合起来添加1个索引
主键索引:主键上会自动添加索引
唯一索引:有unique约束的字段上会自动添加索引
索引的失效
select ename from emp where ename like '%A%';
模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。