zoukankan      html  css  js  c++  java
  • python全栈开发day58-mysql存储过程,权限,索引,慢日志,执行计划,分页优化处理

    1.存储过程

      

    delimiter //
    create procedure insert_data(in rows int)
    	begin
    		DECLARE n INT DEFAULT 1;
    		drop table if exists row300w;
    		create table row300w(id int,name varchar(30));
    			while n < rows do
    				insert into row300w(id,name) values(n,concat('alex',rows));
    				set n = n + 1;	
    			end while;	
    	end//
    delimiter ;
    

      

      1) 模板

        create procedure 存储过程名(

         in 变量表名 数据类型,

                   out @变量名,                        # 另一种定义变量方式

        inout @变量名)

            begin

              。。。。。

            end

            2)  执行存储过程

         call 存储过程名(参数,。。。)

       3)  定义变量

        declare 变量  数据类型

       4) pycharm中调用存储过程

          cursor.callproc('存储过程名',(参数。。。))

             5) 常见流程控制语句

         循环语句:

          while 条件 do 。。。 end while;

          repeat 。。。until 条件 end repeat;

          标志:loop 。。。 if 条件 then 

          leave 标志;

              end if;

            end loop;

          https://www.cnblogs.com/ClassNotFoundException/p/6369843.html

         CASE语句:可以用到查询,更新等语法中

          https://www.jianshu.com/p/5112428a13b3

          (1)select case 变量   // 或case(变量)

             when 值 then 。。。

             when 值 then 。。。

              。。。。。

           else 。。。

                        end  字段名

         if (条件,条件真时结果,条件假时结果):

         ifnull(a,b) a不为null 返回a,否则返回b

                   nullif(a,b) 如果a==b 返回null 否则a                       

    2.权限

      1) 创建用户,修改用户名和密码,删除用户

        create user ‘xxx’@‘192.168.1.%’ identified by ‘123’;

        create user ‘xxx’@‘%’ identified by ‘123’;

        rename user ‘用户名’@‘ip地址’ to ‘新用户名’@‘ip地址’

        set password for ‘用户名’@‘ip地址’=password(‘新密码’);

      2) 授权,撤销授权

        grant all privileges on *.* to '用户名'@‘ip地址’

        show grants for '用户'@'IP地址'
        revoke all on *.* from '用户'@'IP地址'
        
        取消来自远程服务器的mjj用户所有数据库的所有的表的权限
        revoke all privileges on *.* from 'mjj'@'%';

    3.mysql 备份

      mysqldump -uroot -p 数据库名 > 导出文件路径

      mysqldump -uroot -p  -d 数据库名 > 导出文件路径

      mysqdump -u root -d db10 < db1.sql -p # 导入文件至数据库

    4.索引

      写在前面:

        

    无索引: 从前往后一条一条查询
    有索引:创建索引的本质,就是创建额外的文件(某种格式存储,查询的时候,先去格外的文件找,定好位置,然后再去原始表中直接查询。但是创建索引越多,会对硬盘也是有损耗。
    
    建立索引的目的:
    a.额外的文件保存特殊的数据结构
    b.查询快,但是插入更新删除依然慢
    c.创建索引之后,必须命中索引才能有效

      单例索引:

        普通索引:仅有一个加速查找的作用

          create index 索引名 on 表名(列名);

          create table xxx(

                .....

                index 索引名(列名));

          drop index 索引名 on 表名;

          show index 索引名 from 表名;

        唯一索引:加速查找+唯一约束(可含null)

          创建 create unique index 索引名 on 表名(列名);

          drop index 索引名 on 表名;

        主键索引:加速查找+唯一约束(不含null)

         alter table 表名 add primary key(列名);

         alter table 表名 drop primary key;

         alter table 表名 modify 列名 int ,drop primary key;

      组合索引

        普通组合索引,和索引合并的区别   

        create index 索引名 on 表名(列名1,列名2);

      空间索引

      索引覆盖和索引合并

      正确使用索引:

        创建索引、命中索引、正确使用索引

        尽量避免使用like、函数、or、类型不一致、!=、>、<、order by 

      组合索引最左前缀:

    5.慢日志

    (1) 进入MySql 查询是否开了慢查询
    show variables like 'slow_query%';
    参数解释:
    slow_query_log 慢查询开启状态 OFF 未开启 ON 为开启
    slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)

    (2)查看慢查询超时时间
    show variables like 'long%';
    ong_query_time 查询超过多少秒才记录 默认10秒

    (3)开启慢日志(1)(是否开启慢查询日志,1表示开启,0表示关闭。)
    set global slow_query_log=1;
    (4)再次查看
    show variables like '%slow_query_log%';

    (5)开启慢日志(2):(推荐)
    在my.cnf 文件中
    找到[mysqld]下面添加:
    slow_query_log =1
         slow_query_log_file=C:mysql-5.6.40-winx64datalocalhost-slow.log
        long_query_time = 1

    参数说明:
    slow_query_log 慢查询开启状态 1 为开启
    slow_query_log_file 慢查询日志存放的位置
    long_query_time 查询超过多少秒才记录 默认10秒 修改为1秒

     

    6.执行计划

      explain + 查询sql-用于显示SQL执行信息参数,根据参考信息可以进行sql优化;

       主要的type参数:查询的访问方式,性能:

        all < index < range < index_merge < ref_or_null <ref < eq_ref <system/const

        all:  全表扫描 ,有limit则找到不在扫描

        index:  全索引扫描,对索引从头到尾找一遍

        range:  对索引列进行范围查找

        index_merge:  合并索引,使用多个单例索引搜索

        ref:  根据索引找到一个值或多个值

        eq_ref:  连接时使用primarykey 或unique类型

        const:  常量

        system:系统 表仅有一行。  

      。。。。。。。。。。。。

    7.分页优化查询

      

  • 相关阅读:
    第十二周
    第十一周作业
    第十周作业
    第九周作业
    第五周总结和实验报告三
    第四周总结和实验报告二
    第一周实验报告和第三周课程总结
    第二周总结
    2019春总结作业
    2019年春第二次课程设计实验报告
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9343315.html
Copyright © 2011-2022 走看看