mysql查詢分析與優化
show www.2cto.com
show status ——顯示狀態資訊(擴充套件show status like 『***』)
show variables ——顯示系統變數(擴充套件show variables like 『***』)
show engine innodb status ——顯示innodb儲存引擎的狀態
show processlist ——檢視當前sql執行,包括執行狀態、是否鎖表等
mysqladmin variables -u username -p password——顯示系統變數
mysqladmin extended-status -u username -p password——顯示狀態資訊
explain
table:顯示這一行的資料是關於哪張表的
possible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇乙個合適的語句
www.2cto.com
key:實際使用的索引。如果為null,則沒有使用索引。mysql很少會選擇優化不足的索引,此時可以在select語句中使用use index(index)來強制使用乙個索引或者用ignore index(index)來強制忽略索引
key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是乙個常數
rows:mysql認為必須檢索的用來返回請求資料的行數
type:這是最重要的字段之一,顯示查詢使用了何種型別。從最好到最差的連線型別為system、const、eq_reg、ref、range、index和all
system、const:可以將查詢的變數轉為常量. 如id=1; id為 主鍵或唯一鍵.
eq_ref:訪問索引,返回某單一行的資料.(通常在聯接時出現,查詢使用的索引為主鍵或惟一鍵)
ref:訪問索引,返回某個值的資料.(可以返回多行) 通常使用=時發生
range:這個連線型別使用索引返回乙個範圍中的行,比如使或查詢東西,並且該字段上建有索引時發生的情況(注:不一定好於index)
index:以索引的順序進行全表掃瞄,優點是不用排序,缺點是還要全表掃瞄
all:全表掃瞄,應該盡量避免
extra:關於mysql如何解析查詢的額外資訊,主要有以下幾種
using index:只用到索引,可以避免訪問表.
using where:使用到where來過慮資料. 不是所有的where clause都要顯示using where. 如以=方式訪問索引.
using tmporary:用到臨時表
using filesort:用到額外的排序. (當使用order by v1,而沒用到索引時,就會使用額外的排序)
range checked for eache record(index map:n):沒有好的索引.
profiling
開啟功能: mysql>set profiling=1;
show profiles; 可以得到被執行的sql語句的時間和id
show profile for query 1; 得到對應sql語句執行的詳細資訊
測試完畢以後 ,關閉引數:mysql> set profiling=0
Mysql慢查詢分析與優化
慢查詢 顧名思義,耗時很長 響應很慢的查詢 危害 導致整個資料庫響應變慢 過多消耗cpu或者io 短連線場景下還可能引起耗盡連線數 以下引數均是是在mysql的配置檔案 etc my.cnf中配置的,配置在 mysqld 下。引數名含義 slow query log 是否開啟慢查詢 long que...
MYSQL查詢與優化
sql查詢關聯兩個資料表,乙個是攻擊ip使用者表主要是記錄ip的資訊,如第一次攻擊時間,位址,ip等等,乙個是ip攻擊次數表主要是記錄每天ip攻擊次數。而需求是獲取某天攻擊ip資訊和次數。以下sql語句測試均在測試伺服器上上,正式伺服器的效能好,查詢時間快不少。檢視表的行數 未優化前sql語句為 s...
mysql優化之profile查詢分析
通過慢日誌查詢可以知道哪些sql語句執行效率低下,通過explain我們可以得知sql語句的具體執 況,索引使用等,還可以結合show命令檢視執行狀態。如果覺得explain的資訊不夠詳細,可以同通過profiling命令得到更準確的sql執行消耗系統資源的資訊。這裡還需要注意一點就是,需要安裝pr...