版权声明: 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;