SHOW STATUS提供msyql服務器的狀態信息
一般情況下,我們只需要了解以”Com”開頭的指令
show session status like ‘Com%’; // 顯示當前的連接的統計結果 show global status like ‘Com%’; // 顯示自數據庫上次啟動至今的統計結果
注:默認是session級別的
其中Com_XXX表示XXX語句所執行的次數。
重點注意:Com_select,Com_insert,Com_update,Com_delete通過這幾個參數,可以容易地了解到當前數據庫的應用是以插入更新為主還是以查詢操作為主,以及各類的SQL大致的執行比例是多少。
另外,還有幾個參數需要注意下:
show status like ‘Connections’// 試圖連接MySQL服務器的次數 show status like ‘Uptime’//服務器工作的時間(單位秒) show status like ‘Slow_queries’//慢查詢的次數 (默認是10秒中就當做是慢查詢,如下圖所示)
a) 如何查詢mysql的慢查詢時間
Show variables like 'long_query_time';
b) 修改mysql 慢查詢時間
set long_query_time=2 //如果查詢時間超過2秒就算作是慢查詢
問題是:如何在一個項目中,找到慢查詢的select語句?
答案:mysql支持把慢查詢語句記錄到日志文件中。程序員需要修改php.ini的配置文件,默認情況下,慢查詢記錄是不開啟的。
開啟慢查詢記錄的步驟:
打開 my.ini ,找到 [mysqld] 在其下面添加
long_query_time = 2 log-slow-queries = /data/mysql/logs/slow.log #設置把日志寫在那裡,可以為空,系統會給一個缺省的文件
例子:我們數據表中有1千萬條的數據量
DQL語句:SELECT * FROM order_copy WHERE id=12345;
查詢耗時:19s>2s,所以mysql會將該條select語句記錄到慢查詢日志中
SELECT * FROM order_copy WHERE id=12345 的執行時間
添加索引前:19s
添加索引後:0.08s
使用explain分析該dql語句:
EXPLAIN SELECT * FROM order_copy WHERE id=12345
會產生如下信息:
select_type:表示查詢的類型。
table:輸出結果集的表
type:表示表的連接類型(system和const為佳)
possible_keys:表示查詢時,可能使用的索引
key:表示實際使用的索引
key_len:索引字段的長度
rows:掃描的行數
Extra:執行情況的描述和說明
注意:要盡量避免讓type的結果為all,extra的結果為:using filesort
例如:給字段id添加索引:
ALTER TABLE order_copy ADD PRIMARY KEY(id)
給1千萬的數據添加primary key 需要耗時: 428秒(7分鐘)
EXPLAIN SELECT * FROM order_copy WHERE id=12345
正是因為給id添加了索引,才使得rows的結果為1
但是索引並不是可以隨便添加的,以下幾種情況需牢記在心:
select * from order_copy where id = $id
select * from order_copy where sex=’女’
select * from order_copy where order_state=’未付款’
索引的類型:
索引的使用
添加主鍵(索引) ALTER TABLE 表名 ADD PRIMARY KEY(列名,..); 聯合主鍵