MySQL学习小结(四) 视图

版权声明: https://blog.csdn.net/qq_21578125/article/details/89082206
-- 索引

-- 索引的原理
/* 
索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行。表越大,花费时间越多。对于一个有序字段,可以运用二分查找(Binary Search),这就是为什么性能能得到本质上的提高。MYISAM和INNODB都是用B+Tree作为索引结构
(主键,unique 都会默认的添加索引)
*/

-- 索引的应用

-- 创建索引
/*什么时候需要给字段添加索引:
-表中该字段中的数据量庞大
   -经常被检索,经常出现在where子句中的字段
   -经常被DML操作的字段不建议添加索引
*/

create unique index u_ename on emp(ename);
create index test_index on emp (sal);
show index from emp;

explain select sal from emp where sal > 1500;-- 看到type!=all了,说明使用了索引

DROP INDEX test_index ON emp;
ALTER TABLE emp DROP INDEX test_index;-- 和上一条语句等价
ALTER TABLE table_name DROP PRIMARY KEY;-- 只在删除主键索引时使用
explain select sal from emp where sal > 1500;-- 看到type=all了,说明没有使用索引全表扫描


-- 视图

/*
	•	视图是一种根据查询(也就是SELECT表达式)定义的数据库对象,用于获取想要看到和使用的局部数据。 
	•	视图有时也被成为“虚拟表”。 
	•	视图可以被用来从常规表(称为“基表”)或其他视图中查询数据。
	•	相对于从基表中直接获取数据,视图有以下好处:
			–	访问数据变得简单
			–	可被用来对不同用户显示不同的表的内容
	用来协助适配表的结构以适应前端现有的应用程序
	视图作用:
			-	提高检索效率
			-	隐藏表的实现细节【面向视图检索】


*/

create view v_dept_emp as 
select ename,dname,sal,hiredate,e.deptno from emp e,dept d where e.deptno = e.deptno and e.deptno = 10;


create view v_dept_avg_sal_grade as 
select a.deptno, a.avg_sal, b.grade from (select deptno, avg(sal) avg_sal from emp group by deptno) a, salgrade b  where a.avg_sal between b.losal and b.hisal; /*注意mysql不支持子查询创建视图*/

alter view  v_dept_emp as 
select ename,dname,sal,hiredate,e.deptno from emp e,dept d where e.deptno = 20;

drop view if exists v_dept_emp;

猜你喜欢

转载自blog.csdn.net/qq_21578125/article/details/89082206