MySQL——索引与视图

索引

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

select ename,sal from emp where ename='SMITH';

当ename字段上没有添加索引的时候,以上sql语句会进行全表扫描,扫描ename字段中的所有的值。

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

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

注意:主键和具有unique约束的字段自动会添加索引。根据主键查询效率较高。尽量根据主键查询。
创建索引对象:create index 索引名称 on 表名(字段名);
删除索引对象:drop index 索引名称 on 表名;
查看sql语句的执行计划:
explain select ename,sal from emp where sal=5000;
type:ALL

给薪资sal字段添加索引:

create index emp_sal_index on emp(sal);
type:ref
索引底层采用的数据结构是:B+Tree
索引的实现原理?

通过B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的。

select ename from emp where ename='SMITH';

通过索引转换为:

select ename from emp where 物理地址=0x3;
索引的分类?

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

索引什么时候失效?
select ename from emp where ename like '%A%';

模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。

视图

什么是视图?

站在不同的角度去看到数据。(同一张表的数据,通过不同的角度去看待)

怎么创建视图?怎么删除视图?
create view myview as select empno,ename from emp;
drop view myview;

注意:只有对DQL语句才能以视图对象的方式创建出来。

对视图进行增删改查,会影响到原表数据。(通过视图影响原表数据的,不是直接操作的原表)可以对视图进行CRUD操作
create table emp_bak as select * from emp;
create view myview as select empno,ename,sal from emp_bak;
update myview set ename='hehe',sal=1 where empno=7369;//通过视图修改原表数据。
delete from myview where empno=7369;//通过视图删除原表数据。
视图的作用?

视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD操作。

你可能感兴趣的:(MySQL——索引与视图)