MySQL进阶之SQL优化、视图、存储过程

1.插入数据优化:

MySQL进阶之SQL优化、视图、存储过程_第1张图片

 顺序插入要比乱序插入性能较高。

MySQL进阶之SQL优化、视图、存储过程_第2张图片

在第一次使用这个大批量插入数据时应该使用下列的命令来设置

MySQL进阶之SQL优化、视图、存储过程_第3张图片 使用select @@local_infile可以看出这个local_infile开关是否打开,0是关闭,1是打开。关闭就用set打开。

 MySQL进阶之SQL优化、视图、存储过程_第4张图片

注意插入数据时,应先use某个数据库。 

load data local infile '文件名'by ','(通过逗号分隔开)lines terminated by '\n';

2.主键优化:

MySQL进阶之SQL优化、视图、存储过程_第5张图片

 主键顺序插入时:MySQL进阶之SQL优化、视图、存储过程_第6张图片

 主键乱序插入时:可能会发生页分裂现象。

MySQL进阶之SQL优化、视图、存储过程_第7张图片

 MySQL进阶之SQL优化、视图、存储过程_第8张图片

当数据删除量超过一般就可以考虑页合并啦。下面就是可以直接进行页合并了。

 MySQL进阶之SQL优化、视图、存储过程_第9张图片

 再次插入数据时就插入到3号数据页。

3.order by优化:

MySQL进阶之SQL优化、视图、存储过程_第10张图片

先按age排序,当age相同时再按phone排

 当没有建立与这两个索引相匹配的索引时,查询的结果就是using filesort。反之,则结果就是using index。

MySQL进阶之SQL优化、视图、存储过程_第11张图片

当一个降序一个升序时就要另外建立一个与之相关的索引啦,注意要指定哪个升序哪个降序,

若没有明确指出,默认就是升序排序。

MySQL进阶之SQL优化、视图、存储过程_第12张图片

尽量使用覆盖索引,尽量不要使用select *

4.group by优化

MySQL进阶之SQL优化、视图、存储过程_第13张图片

5.limit优化:通过覆盖索引和子查询的方式来优化。

 limit 0,10表示从0开始,每页返回10个数据。

6.count优化:

 MySQL进阶之SQL优化、视图、存储过程_第14张图片

 select count(profession)from tb_user;//注意这个profession不能为空,为空的那一个不能参与计数。

MySQL进阶之SQL优化、视图、存储过程_第15张图片

 MySQL进阶之SQL优化、视图、存储过程_第16张图片

 

 MySQL进阶之SQL优化、视图、存储过程_第17张图片

 所以where条件字段一定要有索引。否则性能会降低。

uuid是指比较长的随机字符串。

视图:数据库的存储对象

MySQL进阶之SQL优化、视图、存储过程_第18张图片

 

 MySQL进阶之SQL优化、视图、存储过程_第19张图片

 

 MySQL进阶之SQL优化、视图、存储过程_第20张图片

 

 

 向视图中插入数据其实是向基表中插入数据。但当我们在基表中查询数据时,这些从视图插入的数据并不存在。

解决方法,在建立视图的sql语句末尾加上with cascaded/local  check option

MySQL进阶之SQL优化、视图、存储过程_第21张图片

 这样再插入数据时,就可以把符合where条件的数据插入到基表和视图中啦,注意不符合where条件的数据不会插入到基表和视图

只有加入with cascaded(级联)/local  check option才会去检查插入的数据是否违背where条件表达式。

基于视图再创建视图:

 MySQL进阶之SQL优化、视图、存储过程_第22张图片

这里26插不进去是因为不仅要检查插入的视图,还要再去检查该视图依赖的视图的where条件表达式。 

MySQL进阶之SQL优化、视图、存储过程_第23张图片

 主要要有检查选项才会去执行检查是否符合where条件表达式

视图更新:

MySQL进阶之SQL优化、视图、存储过程_第24张图片

MySQL进阶之SQL优化、视图、存储过程_第25张图片

 MySQL进阶之SQL优化、视图、存储过程_第26张图片

 存储过程:

MySQL进阶之SQL优化、视图、存储过程_第27张图片

 MySQL进阶之SQL优化、视图、存储过程_第28张图片

存储过程的SQL语句:

MySQL进阶之SQL优化、视图、存储过程_第29张图片

 MySQL进阶之SQL优化、视图、存储过程_第30张图片

 建立存储过程后在rountine文件夹下会有一个p1

MySQL进阶之SQL优化、视图、存储过程_第31张图片

 MySQL进阶之SQL优化、视图、存储过程_第32张图片

 

 MySQL进阶之SQL优化、视图、存储过程_第33张图片

相当于我们重定义结束符¥¥

查看系统变量:

MySQL进阶之SQL优化、视图、存储过程_第34张图片

 session表示绘画级别的系统变量。global表示全局的系统变量。

表示查看autocommit这个系统变量的值。

 

 这些设置在服务器重启后都会恢复到默认值,需要在mysql系统文件中永久设置

用户定义变量:

MySQL进阶之SQL优化、视图、存储过程_第35张图片

 MySQL进阶之SQL优化、视图、存储过程_第36张图片

 随便赋值用:=  当设置一个变量却没有赋值时,系统默认为null

局部变量:

MySQL进阶之SQL优化、视图、存储过程_第37张图片

 声明时declare后面的default加上一个数就是默认值。

设置局部变量的案例:

MySQL进阶之SQL优化、视图、存储过程_第38张图片

 注意赋值和使用不要和局部变量的赋值和使用混淆。select @stu_student是关于局部变量的。最后使用call+存储过程来调用。

1.if判断:

MySQL进阶之SQL优化、视图、存储过程_第39张图片

 案例:

MySQL进阶之SQL优化、视图、存储过程_第40张图片

 2.参数:

MySQL进阶之SQL优化、视图、存储过程_第41张图片

 若不设置参数类型,默认就是in类型。

MySQL进阶之SQL优化、视图、存储过程_第42张图片

 MySQL进阶之SQL优化、视图、存储过程_第43张图片

case判断:

MySQL进阶之SQL优化、视图、存储过程_第44张图片

 用第二种居多。

MySQL进阶之SQL优化、视图、存储过程_第45张图片

concat作用是拼接字符串。

 

 while循环:

MySQL进阶之SQL优化、视图、存储过程_第46张图片

 MySQL进阶之SQL优化、视图、存储过程_第47张图片

 repeat循环:有条件的循环控制语句

MySQL进阶之SQL优化、视图、存储过程_第48张图片

 MySQL进阶之SQL优化、视图、存储过程_第49张图片

 loop循环:

MySQL进阶之SQL优化、视图、存储过程_第50张图片

 MySQL进阶之SQL优化、视图、存储过程_第51张图片

 sum:就是我们自己定义的标签。

MySQL进阶之SQL优化、视图、存储过程_第52张图片

游标:

MySQL进阶之SQL优化、视图、存储过程_第53张图片

MySQL进阶之SQL优化、视图、存储过程_第54张图片

 最后的end不要忘了哦

 

最后结果会发现用call来调用失败,通过查询结果可以发现表tb_user_pro其实已经存在,只不过是循环条件有问题。由此引出下面的条件引出程序:

条件处理程序:

MySQL进阶之SQL优化、视图、存储过程_第55张图片

 

 在声明游标下面加上这一句定义,但出现02000报错的时候就退出并关闭游标。这样调用call就可以使用了。这种是使用状态码的方法

同样可以结合上图,把SQLSTATE ‘02000’改变为NOT FOUND等。

存储函数:

MySQL进阶之SQL优化、视图、存储过程_第56张图片

 MySQL进阶之SQL优化、视图、存储过程_第57张图片

 有关MySQL进阶之SQL优化、视图、存储过程的内容就分享到这了。

你可能感兴趣的:(MySQL,sql,数据库)