共計(jì) 1664 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
自動(dòng)寫代碼機(jī)器人,免費(fèi)開通
如何在 mysql 數(shù)據(jù)庫(kù)中開啟慢查詢?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面丸趣 TV 小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
1、開啟慢查詢
1 查看慢查詢是否開啟
show variables like %quer%
slow_query_log = ON # 已開啟
2 開啟方法:my.cnf 目錄配置
slow_query_log=on # 是否開啟
slow_query_log_file=/opt/MySQL_Data/TEST1-slow.log # 慢查詢文件位置
long_query_time=2 # 查詢超過多少秒才記錄
2、EXPLAIN 慢查詢?nèi)罩纠锍霈F(xiàn)的 SELECT 查詢
idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra1SIMPLEuserNULLrefuseruser768const1100.00NULL
explain 列的解釋
table:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的
type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為 const、eq_reg、ref、range、index、all
possible_keys:顯示可能應(yīng)用在這張表中的索引。如果為空,沒有可能的索引。可以為相關(guān)的域從 where 語(yǔ)句中選擇一個(gè)合適的語(yǔ)句
key:實(shí)際使用的索引。如果為 null,則沒有使用索引。很少的情況下,mysql 會(huì)選擇優(yōu)化不足的索引。這種情況下,可以在 select 語(yǔ)句中使用 use index(indexname)來強(qiáng)制使用一個(gè)索引或者用 ignore index(indexname)來強(qiáng)制 mysql 忽略索引
key_len:使用的索引的長(zhǎng)度。在不損失精確性的情況下,長(zhǎng)度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是一個(gè)常數(shù)
rows:mysql 認(rèn)為必須檢查的用來返回請(qǐng)求數(shù)據(jù)的行數(shù)
extra:關(guān)于 mysql 如何解析查詢的額外信息。例子:using temporary 和 using filesort,意思 mysql 根本不能使用索引,結(jié)果是檢索會(huì)很慢
key_len 的計(jì)算
所有的索引字段,如果沒有設(shè)置 not null,則需要加一個(gè)字節(jié)。
定長(zhǎng)字段,int 占四個(gè)字節(jié)、date 占三個(gè)字節(jié)、char(n)占 n 個(gè)字符。
對(duì)于變成字段 varchar(n),則有 n 個(gè)字符 + 兩個(gè)字節(jié)。
不同的字符集,一個(gè)字符占用的字節(jié)數(shù)不同。latin1 編碼的,一個(gè)字符占用一個(gè)字節(jié),gbk 編碼的,一個(gè)字符占用兩個(gè)字節(jié),utf8 編碼的,一個(gè)字符占用三個(gè)字節(jié)。
3、建索引的幾大原則
最左前綴匹配原則,非常重要的原則,mysql 會(huì)一直向右匹配直到遇到范圍查詢 (、、between、like) 就停止匹配,比如 a = 1 and b = 2 and c 3 and d = 4 如果建立 (a,b,c,d) 順序的索引,d 是用不到索引的,如果建立 (a,b,d,c) 的索引則都可以用到,a,b,d 的順序可以任意調(diào)整。
= 和 in 可以亂序,比如 a = 1 and b = 2 and c = 3 建立 (a,b,c) 索引可以任意順序,mysql 的查詢優(yōu)化器會(huì)幫你優(yōu)化成索引可以識(shí)別的形式。
盡量選擇區(qū)分度高的列作為索引, 區(qū)分度的公式是 count(distinct column)/count(*),表示字段不重復(fù)的比例,比例越大我們掃描的記錄數(shù)越少,唯一鍵的區(qū)分度是 1,而一些狀態(tài)、性別字段可能在大數(shù)據(jù)面前區(qū)分度就是 0,那可能有人會(huì)問,這個(gè)比例有什么經(jīng)驗(yàn)值嗎?使用場(chǎng)景不同,這個(gè)值也很難確定,一般需要 join 的字段我們都要求是 0.1 以上,即平均 1 條掃描 10 條記錄。
索引列不能參與計(jì)算和函數(shù)的使用,保持列干凈。
盡量的擴(kuò)展索引,不要新建索引。比如表中已經(jīng)有 a 的索引,現(xiàn)在要加 (a,b) 的索引,那么只需要修改原來的索引即可。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝您對(duì)丸趣 TV 的支持。
向 AI 問一下細(xì)節(jié)