一、批量插入数据脚本
往表里插入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;
执行结果关注点如下:
- converting HEAP to MyISAM 查询结果太大,内存都不够用了,往磁盘上搬了
- createing tmp table 创建临时表(拷贝数据到临时gcopying to tmp table、删除remove tmp table)
- copying to tmp table on disk 把内存中临时表复制到磁盘,危险!!!
- locked
案例一:show profile cpu,block io for query 8的结果:多了创建
临时表
、复制
临时表
、删除临时表的过程
★结论:只要show profile中出现上述关注点中的任意一个,那么sql就需要想办法做优化
三、全局查询日志(测试环境启用,生产环境禁用)
启用方法:
1、配置启用
2、编码启用
★★★特别注意:永远不要在生产环境中启用此功能