1 使用explain語句去查看分析結果,如
explain select * from test1 where id=1;
會出現:
id selecttype table type possible_keys key key_len ref rows extra各列
其中,type=const表示通過索引一次就找到了,key=primary的話,表示使用了主鍵
type=all,表示為全表掃描,key=null表示沒用到索引;
假如在test1表中,結構如下:
id name
假如id為自動遞增,name設定了索引,則explain後,會發現
type=ref,因為這時認為是多個匹配行,在聯集查詢中,一般為REF
2 MYSQL中的複合式索引
假設表有id,key1,key2,key3,把三者形成一個複合式索引,則
如:
where key1=....
where key1=1 and key2=2
where key1=3 and key3=3 and key2=2
根據最左原則,這些都是可以使用索引的哦
如
from test where key1=1 order by key3
用explain分析的話,只用到了normal_key索引,但只對where子句起作用,而後面的order by需要排序
3 使用慢查詢分析:
在my.ini中:
long_query_time=1
log-slow-queries=d:\mysql5\logs\mysqlslow.log
把超過1秒的記錄在慢查詢日誌中
可以用mysqlsla來分析之。也可以在mysqlreport中,有如
DMS 分別分析了select ,update,insert,delete,replace等所佔的百份比
4 MYISAM和INNODB的鎖定
myisam中,注意是表鎖來的,比如在多個UPDATE操作後,再SELECT時,會發現SELECT操作被鎖定了,必須等所有
UPDATE操作完畢後,再能SELECT
innodb的話則不同了,用的是行鎖,不存在上面問題。
5 MYSQL的事務配置項
innodb_flush_log_at_trx_commit=1
表示事務提交時立即把交易記錄寫入磁碟,同時資料和索引也更新
innodb_flush_log_at_trx_commit=0
事務提交時,不立即把交易記錄寫入磁碟,每隔1秒寫一次
innodb_flush_log_at_trx_commit=2
事務提交時,立即寫入磁碟檔案(這裡只是寫入到核心緩衝區,但不立即重新整理到磁碟,而是每隔1秒重新整理到磁碟,同
時更新資料和索引,