高性能的MySQL(2)慢查询
2013-10-10 16:39
253 查看
一、剖析MySQL查询
1、首先从慢查询开始,慢查询是开销最低,精度最高的测量查询时间的工具。
a、开始mysql的慢查询,修改my.conf
[mysqld] #开启慢查询 log_slow_queries = ON #指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log log-slow-queries = /usr/local/mysq/var/slowquery.log #记录超过的时间,默认为10s long_query_time = 1 #log下来没有使用索引的query,可以根据情况决定是否开启 log-queries-not-using-indexes #执行速度较慢的管理命令(比如OPTIMEZE TABLE)也会被记录 log-slow-admin-statements
b、查看当前信息
c、写存储过程,生成一个500W记录的表
#生成随机字符串函数,在存储过程中调用 delimiter $$ create function rand_string(n int) returns varchar(255) begin declare chars_str varchar(100) default 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; declare return_str varchar(255) default ''; declare i int default 0; while i<n do set return_str = concat(return_str,substring(chars_str,floor(1+rand()*52),1)); set i = i + 1; end while; return return_str; end $$ delimiter ; #生成随机数字,在存储过程中调用 delimiter $$ create function rand_num() returns int(5) begin declare i int default 0; set i = floor(10+rand()*500); return i; end $$ delimiter ; #定义存储过程 delimiter $$ create procedure insert_emp(start int(10),max_num int(10)) begin declare i int default 0; set autocommit = 0; repeat set i = i+1; insert into emp values((start+i),rand_string(6),'SALESMAN',0001,2000,400,rand_num(),curdate()); until i = max_num end repeat; end $$d、查看表数据
e、生成一条慢查询
f、查看日志,会有一条这样的记录
# Time: 131010 16:31:11 # User@Host: root[root] @ localhost [] # Query_time: 1.045439 Lock_time: 0.000057 Rows_sent: 1 Rows_examined: 5000000 SET timestamp=1381393871; select * from emp where id=1000000;
相关文章推荐
- 学习数据库―― 写出高质量、高性能的MySQL查询
- [高性能MySQL]-特定类型查询的优化
- 高性能的MySQL(6)查询慢与重构查询
- 高性能MYSQL(学习笔记)-查询性能优化篇1
- 高性能Mysql第三版(第六章查询性能优化)
- 高性能的MySQL(6)查询慢与重构查询
- 高性能MYSQL——6章查询执行的基础(1)
- 【高性能MySQL】查询优化
- 高性能的MySQL(3)单条查询问题还是服务器问题
- 高性能的MySQL(3)单条查询问题还是服务器问题
- Mysql剖析单条查询(高性能mySql学习笔记)
- 高性能Mysql学习笔记-查询性能优化
- [高性能MySQL]--查询缓存
- 高性能MySql设计之查询优化
- 高性能mysql笔记(八)查询执行基础
- 高性能MySQL之Count统计查询
- 高性能的MySQL(6)查询执行机制(上)
- 高性能Mysql笔记 (6)---查询优化
- 高性能的MySQL(6)查询执行机制(上)
- [Mysql]SQL 高性能查询优化语句