1.使用 show session status like '%Com_%'; 可以查看當前連接的各個sql的執行頻率
show global status like '%Com_%'; 可以查看從上次mysql服務器啟動到目前為止sql的執行頻率
2.explain select * from tmp;
mysql> explain select * from zi_emp where tid = 1000\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: zi_emp
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 2
Extra: Using where
1 row in set (0.00 sec)
PS::type類型中,ALL為效率最差,因為這樣意味著進行全表掃描
index類型為索引全掃描
range為索引范圍掃描
ref為非唯一索引或唯一索引的前綴掃描
eq_ref唯一索引掃描
const/system 單表中只有一個匹配的行,比如用戶表
NULL 沒有訪問到表或索引 比如:select 1=1;
3.哈哈,發現一個很好的東西
explain extended select * from zi_emp; 查看執行sql語句前,mysql優化器做了點什麼
show warnings;
mysql> show warnings\G
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: select `bin`.`zi_emp`.`tid` AS `tid`,`bin`.`zi_emp`.`tname` AS `tname` from `bin`.`zi_emp`
1 row in set (0.00 sec)
PS::沒錯,你看的就是一條完整的sql語句,也就是說這可能是msyql給定的最好的sql語句了,可以學習並復用
4.explain partitions select * from zi_emp where xxxxx 可以查看當前記錄的分區所在位置
這條SQL語句很簡單,就一個條件單純從語句上已經無法優化了,但可以使用其它的方法
比如,你的 guid 是一個固定長度的字符串嗎?如果是的話,可以使用 char 類型,另外,如果 guid 字段不是主鍵的話,並且經常被檢索的話,可以為該字段創建索引,有了索引以後,相信查詢速度至少可以提高10倍以上
你是要sql性能調優還是想縮短sql長度啊 這句sql又不是復雜sql 就是幾個嵌套 你用執行計劃跑一下 看性能消耗在哪段上 再針對那段優化
你sql裡面最耗費性能的我估計就是distinct 我看你這裡完全沒有必要做這個 直接去掉就可以了