mysql高级----查询截取分析(二):批量插入数据脚本、用show profile分析sql、全局查询日志

一、批量插入数据脚本

往表里插入1000w数据
1、建表

2、设置参数log_bin_trust_function_creators



3、创建函数,保证每条数据都不同(
#3.1 随机产生字符串
定义函数rand_string(n) 
注:delimiter $$表示将sql默认的结束符号(;)改成$$ 

#3.2 随机产生部门编号
定义函数 rand_num()

4、创建存储过程
#4.1 创建emp表的存储过程

#4.2 创建dept表的存储过程


5、调用存储过程
# dept
# emp



二、show profile分析sql
1、是什么?
#定义:是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量。
#默认情况下,参数处于关闭状态,并保存最近15次的运行结果

2、分析步骤
# 步骤一:看当前的mysql版本是否支持

# 步骤二:开启show profiles功能(默认是关闭的)
>>set profiling=on;

# 步骤三:运行SQL
>>按id%10,id%20的余数来分组。

# 步骤四:查看结果, show profiles ;


# 步骤五:诊断SQL,show profile cpu,block io for query 上一张结果图(show profiles结果)的Query_ID号码

>>一条SQL的生命周期,完整过程如下:

>>show profile可反应的参数信息 (主要的是cpu,block io两个参数)

# 步骤六:日常开发需要注意的结论
show profile cpu,block io for query + query_id;
执行结果关注点如下:
  1. converting HEAP to MyISAM 查询结果太大,内存都不够用了,往磁盘上搬了
  2. createing tmp table 创建临时表(拷贝数据到临时gcopying to tmp table、删除remove tmp table)
  3. copying to tmp table on disk 把内存中临时表复制到磁盘,危险!!!
  4. locked


案例一:show profile cpu,block io for query 8的结果:多了创建 临时表 、复制 临时表 、删除临时表的过程

★结论:只要show profile中出现上述关注点中的任意一个,那么sql就需要想办法做优化



三、全局查询日志(测试环境启用,生产环境禁用)
启用方法:
1、配置启用

2、编码启用

★★★特别注意:永远不要在生产环境中启用此功能

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