数据库--索引和存储过程以及视图

177 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天

explain(生成执行计划)

explain 语句
  • 通过这种方式可以看到该方法的优化

索引(index)

创建索引

create index 索引的名字 on 表的列(表名);
  • 适用范围:正向查询,模糊查询百分号在后
  • 千万不能滥用索引,一般可以加速查询所以应该在经常用于查询筛选条件的列上建立索引
  • 索引会使用额外的储存空间而且也会降低增删改查的速度(因为索引也要更新)

删除索引

drop index 索引的名字 on 表的列;

视图

视图相当于查询的快照,即把查询语句用视图封装,类似于函数的用法

创建视图

creat view 视图名字 as 查询语句
  • 例子
create view vw_emp_dept as
select eno,ename,dname from tb_emp t1 inner ioin tb_dept t2 on t1.dno=t2.dno;
-- 直接查询视图
select * from vw_emp_dept
  • 优点
  1. 简化查询的操作

  2. 通过视图可以将用户的访问权限限制在某些指定的列上

删除视图

drop view 视图的名字

储存过程

创建存储过程

-- 重新定义定界符
delimiter $$
-- 创建存储过程
create procedure 过程名字(in 输入参数,out 输出参数)
begin
输出语句;
end$$
-- 将定界符恢复
delimiter ;

调用存储过程

call 存储过程的名称(参数);
  • 示例
-- 调用存储过程(@a就是mysql的变量名,@+字符才是数据库的变量名)
call sp_dept_avg_sal(10,@a);
-- 通过输出参数取出部门平均工资
select @a;

删除存储过程

drop procedure 存储过程名称;
  • 优势

它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

触发器

在执行增删改操作中可以触发其他的级联操作,但是有可能导致“锁表”现象,实际开发中应用尽量避免触发器

  • 我们只要知道数据库有触发器就行了,剩下的就是忘了怎么用

如果想要做级联操作时我们可以进行这样的操作(直接更改外键约束即可)

-- 通过更改外键约束来达到级联更新或删除
外键约束语句 on delete cascade on update cascade