mysql--慢查詢 explain profile

慢查詢:

????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;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 觀其大綱 page 01 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫(kù)概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 M...
    周少言閱讀 3,255評(píng)論 0 33
  • Mysql概述 數(shù)據(jù)庫(kù)是一個(gè)易于訪問和修改的信息集合。它允許使用事務(wù)來確保數(shù)據(jù)的安全性和一致性,并能快速處理百萬(wàn)條...
    彥幀閱讀 13,966評(píng)論 10 460
  • 慢查詢?nèi)罩靖拍?MySQL的慢查詢?nèi)罩臼荕ySQL提供的一種日志記錄,它用來記錄在MySQL中響應(yīng)時(shí)間超過閥值的語(yǔ)...
    think_lonely閱讀 912評(píng)論 0 1
  • 餐廳里放著舒緩活潑的音樂,餐桌旁圍坐著的人都在輕松愉悅的交談。朋友和朋友的朋友在這個(gè)下午聚在了一處。她抬起頭看了他...
    花花不說話閱讀 387評(píng)論 0 1
  • 二十七小時(shí)的火車,不知疲倦的我出發(fā)錦里,不知為何似乎成都讓我有些許失望,可能是看厭這種中國(guó)傳統(tǒng)式古色古風(fēng)建...
    周童鞋_閱讀 392評(píng)論 0 0

友情鏈接更多精彩內(nèi)容