高性能的MySQL(2)慢查询
生活随笔
收集整理的這篇文章主要介紹了
高性能的MySQL(2)慢查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、剖析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-statementsb、查看當前信息
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(2)慢查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tableau破解方法_使用Tablea
- 下一篇: lua cURL使用笔记