慢查詢:
????show variables like ‘%general%’;?
????通用日志是否開啟和通用日志的位置

????show variables like ‘%log_out%’;
????日志記錄的形式是數(shù)據(jù)表還是文件

?????show variables like ‘%query%’;

????確認(rèn)配置選項(xiàng)都是開啟狀態(tài),我們模擬執(zhí)行一條耗時(shí)量大的sql:? ?select? sleep(2)
????在我們的日志中發(fā)現(xiàn)出現(xiàn)了新的紀(jì)錄

explain:
????????顯示了mysql如何使用索引來處理select語(yǔ)句以及連接表??梢詭椭x擇更好的索引和寫出更優(yōu)化的查詢語(yǔ)句

? ??????id:代表select 語(yǔ)句的編號(hào), 如果是連接查詢,表之間是平等關(guān)系, select 編號(hào)都是1,從1開始. 如果某select中有子查詢,則編號(hào)遞增.
? ??????select_type:查詢類型
? ? ? ? ? ? |--simple 它表示簡(jiǎn)單的select,沒有union和子查詢
? ? ? ? ? ? |--primary 最外面的select,在有子查詢的語(yǔ)句中,最外面的select查詢就是primary,下圖中就是這樣
????????????????????|--subquery 在where或者h(yuǎn)aving子句中插入另一個(gè)sql
? ??????table:查詢針對(duì)的表 有可能是實(shí)際表名或表的別名
? ??????type: 是指查詢的方式, 非常重要,是分析”查數(shù)據(jù)過程”的重要依據(jù) 。從最好到最差的連接類型為const、eq_reg、ref、range、index和ALL
????????????|--const, system, null這3個(gè)分別指查詢優(yōu)化到常量級(jí)別, 甚至不需要查找時(shí)間.一般按照主鍵來查詢時(shí),易出現(xiàn)const,system或者直接查詢某個(gè)表達(dá)式,不經(jīng)過表時(shí), 出現(xiàn)NULL
????????????|--eq_ref是指,通過索引列,直接引用某1行數(shù)據(jù),常見于連接查詢中
????????????|--ref意思是指 通過索引列,可以直接引用到某些數(shù)據(jù)行
????????????|--range:意思是查詢時(shí),能根據(jù)索引做范圍的掃描
????????????|--index掃描所有的索引節(jié)點(diǎn),相當(dāng)于index_all
????????????|--all:意味著從表的第1行,往后,逐行做全表掃描.,運(yùn)氣不好掃描到最后一行.
? ??????possible_key:可能用到的索引? ? 注意:系統(tǒng)估計(jì)可能用的幾個(gè)索引,但最終,只能用1個(gè).
? ??????key?:最終用的索引.
? ??????key_len:使用的索引的最大長(zhǎng)度
? ??????ref:顯示索引的哪一列被使用了,如果可能的話,是一個(gè)常數(shù)?
? ??????rows: MYSQL認(rèn)為必須檢查的用來返回請(qǐng)求數(shù)據(jù)的行數(shù)?
????????filtered:顯示了通過條件過濾出的行數(shù)的百分比估計(jì)值。
? ??????extra:extra列中出現(xiàn)的信息一般不是太重要,但是還是有很多信息我們可以從這里面獲取到:
? ? ? ? ? ? |--using index:出現(xiàn)這個(gè)說明mysql使用了覆蓋索引,避免訪問了表的數(shù)據(jù)行,效率不錯(cuò)!
? ? ? ? ? ? |--using where:這說明服務(wù)器在存儲(chǔ)引擎收到行后將進(jìn)行過濾。有些where中的條件會(huì)有屬于索引的列,當(dāng)它讀取使用索引的時(shí)候,就會(huì)被過濾,所以會(huì)出現(xiàn)有些where語(yǔ)句并沒有在extra列中出現(xiàn)using where這么一個(gè)說明。
? ? ? ? ? ? |--using temporary:這意味著mysql對(duì)查詢結(jié)果進(jìn)行排序的時(shí)候使用了一張臨時(shí)表。
? ? ? ? ? ? |--using filesort:這個(gè)說明mysql會(huì)對(duì)數(shù)據(jù)使用一個(gè)外部的索引排序,而不是按照表內(nèi)的索引順序進(jìn)行讀取。
? ? ? ? ? ? |--using?join?buffer:MySQL在完成某些join需求的時(shí)候(all row join/all index /scan join)為了減少參與join的“被驅(qū)動(dòng)表”的讀取次數(shù)以提高性能,需要使用到j(luò)oin buffer來協(xié)助完成join操作當(dāng)join buffer 太小,MySQL不會(huì)將該buffer存入磁盤文件而是先將join buffer中的結(jié)果與需求join的表進(jìn)行操作,然后清空join buffer中的數(shù)據(jù),繼續(xù)將剩余的結(jié)果集寫入次buffer中,如此往復(fù),這勢(shì)必會(huì)造成被驅(qū)動(dòng)表需要被多次讀取,成倍增加IO訪問,降低效率(執(zhí)行計(jì)劃中如果現(xiàn)實(shí)using join buffer)

show?Profiles:
????show?Profiles :分析sql執(zhí)行性能
? ????????? 查看mysql是否支持show?profile

? ????????? 如果profiling是關(guān)閉的,可以set語(yǔ)句開啟? set?profiling=1;

? ? ? ? ????show?profiles語(yǔ)句查看當(dāng)前sql的queryid

? ? ? ? ? ? ?然后通過show?profile?for?query?qyeryID分析(獲取指定查詢的開銷 )

????????????查看特定部分的開銷,如下為CPU部分的開銷
????????????show profile block io,cpu for query 1;
????????????show profile memory for query 1;