| 1.通過(guò)查詢(xún)?nèi)罩?br>啟動(dòng)Mysql時(shí)加參數(shù)--log-slow-queries來(lái)記錄執(zhí)行時(shí)間超過(guò)long_query_time秒的sql       Distinct:一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了  Not exists: MYSQL優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標(biāo)準(zhǔn)的行,就不再搜索了 Range checked for each Record(index map:#):沒(méi)有找到理想的索引,因此對(duì)于從前面表中來(lái)的每一個(gè)行組合,MYSQL檢查使用哪個(gè)索引,并用它來(lái)從表中返回行。這是使用索引的最慢的連接之一 Using filesort: 看到這個(gè)的時(shí)候,查詢(xún)就需要優(yōu)化了。MYSQL需要進(jìn)行額外的步驟來(lái)發(fā)現(xiàn)如何對(duì)返回的行排序。它根據(jù)連接類(lèi)型以及存儲(chǔ)排序鍵值和匹配條件的全部行的行指針來(lái)排序全部行 Using index: 列數(shù)據(jù)是從僅僅使用了索引中的信息而沒(méi)有讀取實(shí)際的行動(dòng)的表返回的,這發(fā)生在對(duì)表的全部的請(qǐng)求列都是同一個(gè)索引的部分的時(shí)候 Using temporary 看到這個(gè)的時(shí)候,查詢(xún)需要優(yōu)化了。這里,MYSQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來(lái)存儲(chǔ)結(jié)果,這通常發(fā)生在對(duì)不同的列集進(jìn)行ORDER BY上,而不是GROUP BY上 Where used 使用了WHERE從句來(lái)限制哪些行將與下一張表匹配或者是返回給用戶(hù)。如果不想返回表中的全部行,并且連接類(lèi)型ALL或index,這就會(huì)發(fā)生,或者是查詢(xún)有問(wèn)題不同連接類(lèi)型的解釋?zhuān)ò凑招矢叩偷捻樞蚺判颍?nbsp; system 表只有一行:system表。這是const連接類(lèi)型的特殊情況 const:表中的一個(gè)記錄的最大值能夠匹配這個(gè)查詢(xún)(索引可以是主鍵或惟一索引)。因?yàn)橹挥幸恍校@個(gè)值實(shí)際就是常數(shù),因?yàn)镸YSQL先讀這個(gè)值然后把它當(dāng)做常數(shù)來(lái)對(duì)待 eq_ref:在連接中,MYSQL在查詢(xún)時(shí),從前面的表中,對(duì)每一個(gè)記錄的聯(lián)合都從表中讀取一個(gè)記錄,它在查詢(xún)使用了索引為主鍵或惟一鍵的全部時(shí)使用 ref:這個(gè)連接類(lèi)型只有在查詢(xún)使用了不是惟一或主鍵的鍵或者是這些類(lèi)型的部分(比如,利用最左邊前綴)時(shí)發(fā)生。對(duì)于之前的表的每一個(gè)行聯(lián)合,全部記錄都將從表中讀出。這個(gè)類(lèi)型嚴(yán)重依賴(lài)于根據(jù)索引匹配的記錄多少—越少越好 range:這個(gè)連接類(lèi)型使用索引返回一個(gè)范圍中的行,比如使用>或<查找東西時(shí)發(fā)生的情況 index: 這個(gè)連接類(lèi)型對(duì)前面的表中的每一個(gè)記錄聯(lián)合進(jìn)行完全掃描(比ALL更好,因?yàn)樗饕话阈∮诒頂?shù)據(jù)) ALL:這個(gè)連接類(lèi)型對(duì)于前面的每一個(gè)記錄聯(lián)合進(jìn)行完全掃描,這一般比較糟糕,應(yīng)該盡量避免 使用show status like "Handler_read%"; 來(lái)了解索引的效果。 Handler_read_key 值高表示索引效果好,Handler_read_rnd_next值高表示索引低效。 用show processlist 查看當(dāng)前運(yùn)行狀態(tài)。 
 mysql> show processlist; +-----+-------------+--------------------+-------+---------+-------+----------------------------------+---------- | Id | User | Host | db | Command | Time| State | Info +-----+-------------+--------------------+-------+---------+-------+----------------------------------+---------- |207|root |192.168.0.20:51718 |mytest | Sleep | 5 | | NULL |208|root |192.168.0.20:51719 |mytest | Sleep | 5 | | NULL |220|root |192.168.0.20:51731 |mytest |Query | 84 | Locked | select bookname,culture,value,type from book where id=001 先簡(jiǎn)單說(shuō)一下各列的含義和用途, ID列,一個(gè)標(biāo)識(shí),你要kill一個(gè)語(yǔ)句的時(shí)候很有用,用命令殺掉此查詢(xún) /*/mysqladmin kill 進(jìn)程號(hào)。 user列,顯示單前用戶(hù),如果不是root,這個(gè)命令就只顯示你權(quán)限范圍內(nèi)的sql語(yǔ)句。 host列,顯示這個(gè)語(yǔ)句是從哪個(gè)ip的哪個(gè)端口上發(fā)出的。用于追蹤出問(wèn)題語(yǔ)句的用戶(hù)。 db列,顯示這個(gè)進(jìn)程目前連接的是哪個(gè)數(shù)據(jù)庫(kù)。 command列,顯示當(dāng)前連接的執(zhí)行的命令,一般就是休眠(sleep),查詢(xún)(query),連接(connect)。 time列,此這個(gè)狀態(tài)持續(xù)的時(shí)間,單位是秒。 state列,顯示使用當(dāng)前連接的sql語(yǔ)句的狀態(tài),很重要的列,后續(xù)會(huì)有所有的狀態(tài)的描述,請(qǐng)注意,state只是語(yǔ)句執(zhí)行中的某一個(gè)狀態(tài),一個(gè)sql語(yǔ)句,以查詢(xún)?yōu)槔赡苄枰?jīng)過(guò)copying to tmp table,Sorting result,Sending data等狀態(tài)才可以完成, info列,顯示這個(gè)sql語(yǔ)句,因?yàn)殚L(zhǎng)度有限,所以長(zhǎng)的sql語(yǔ)句就顯示不全,但是一個(gè)判斷問(wèn)題語(yǔ)句的重要依據(jù)。 這個(gè)命令中最關(guān)鍵的就是state列,mysql列出的狀態(tài)主要有以下幾種: Checking table mysql手冊(cè)里有所有狀態(tài)的說(shuō)明,鏈接如下:http://dev./doc/refman/5.0/en/general-thread-states.html | 
|  | 
來(lái)自: 風(fēng)自向前 > 《DB》