欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL查詢性能優(yōu)化武器之鏈路追蹤

 更新時間:2022年08月08日 08:38:31   作者:一燈架構(gòu)???????  
這篇文章主要介紹了MySQL查詢性能優(yōu)化武器之鏈路追蹤,optimizer?trace優(yōu)化器追蹤,可以幫助我們查看優(yōu)化器生成執(zhí)行計劃的整個過程,以及做出的各種決策,包括訪問表的方法、各種開銷計算、各種轉(zhuǎn)換等

前言

MySQL優(yōu)化器可以生成Explain執(zhí)行計劃,我們可以通過執(zhí)行計劃查看是否使用了索引,使用了哪種索引?

但是到底為什么會使用這個索引,我們卻無從得知。

好在MySQL提供了一個好用的分析工具 — optimizer trace(優(yōu)化器追蹤),可以幫助我們查看優(yōu)化器生成執(zhí)行計劃的整個過程,以及做出的各種決策,包括訪問表的方法、各種開銷計算、各種轉(zhuǎn)換等。

1. 查看optimizer trace配置

show variables like '%optimizer_trace%';

輸出參數(shù)詳解:

optimizer_trace 主配置,enabled的on表示開啟,off表示關(guān)閉,one_line表示是否展示成一行

optimizer_trace_features 表示優(yōu)化器的可選特性,包括貪心搜索、范圍優(yōu)化等

optimizer_trace_limit 表示優(yōu)化器追蹤最大顯示數(shù)目,默認是1條

optimizer_trace_max_mem_size 表示優(yōu)化器追蹤占用的最大容量

optimizer_trace_offset 表示顯示的第一個優(yōu)化器追蹤的偏移量

2. 開啟optimizer trace

optimizer trace默認是關(guān)閉,我們可以使用命令手動開啟:

SET optimizer_trace="enabled=on";

3. 線上問題復現(xiàn)

先造點數(shù)據(jù)備用,創(chuàng)建一張用戶表:

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(100) NOT NULL COMMENT '姓名',
  `gender` tinyint NOT NULL COMMENT '性別',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`),
  KEY `idx_gender_name` (`gender`,`name`)
) ENGINE=InnoDB COMMENT='用戶表';

創(chuàng)建了兩個索引,分別是(name)和(gender,name)。

執(zhí)行一條SQL,看到底用到了哪個索引:

select * from user where gender=0 and name='一燈';

跟期望的一致,優(yōu)先使用了(gender,name)的聯(lián)合索引,因為where條件中剛好有gendername兩個字段。

我們把這條SQL傳參換一下試試:

select * from user where gender=0 and name='張三';

這次竟然用了(name)上面的索引,同一條SQL因為傳參不同,而使用了不同的索引。

到這里,使用現(xiàn)有工具,我們已經(jīng)無法排查分析,MySQL優(yōu)化器為什么使用了(name)上的索引,而沒有使用(gender,name)上的聯(lián)合索引。

只能請今天的主角 —optimizer trace(優(yōu)化器追蹤)出場了。

3. 使用optimizer trace

使用optimizer trace查看優(yōu)化器的選擇過程:

SELECT * FROM information_schema.OPTIMIZER_TRACE;

輸出結(jié)果共有4列:

QUERY 表示我們執(zhí)行的查詢語句

TRACE 優(yōu)化器生成執(zhí)行計劃的過程(重點關(guān)注)

MISSING_BYTES_BEYOND_MAX_MEM_SIZE 優(yōu)化過程其余的信息會被顯示在這一列

INSUFFICIENT_PRIVILEGES 表示是否有權(quán)限查看優(yōu)化過程,0是,1否

接下來我們看一下TRACE列的內(nèi)容,里面的數(shù)據(jù)很多,我們重點分析一下range_scan_alternatives結(jié)果列,這個結(jié)果列展示了索引選擇的過程。

輸出結(jié)果字段含義:

  • index 索引名稱
  • ranges 查詢范圍
  • index_dives_for_eq_ranges 是否用到索引潛水的優(yōu)化邏輯
  • rowid_ordered 是否按主鍵排序
  • using_mrr 是否使用mrr
  • index_only 是否使用了覆蓋索引
  • in_memory 使用內(nèi)存大小
  • rows 預(yù)估掃描行數(shù)
  • cost 預(yù)估成本大小,值越小越好
  • chosen 是否被選擇
  • cause 沒有被選擇的原因,cost表示成本過高

從輸出結(jié)果中,可以看到優(yōu)化器最終選擇了使用(name)索引,而(gender,name)索引因為成本過高沒有被使用。

再也不用擔心找不到MySQL用錯索引的原因,趕緊用起來吧!

到此這篇關(guān)于MySQL查詢性能優(yōu)化武器之鏈路追蹤的文章就介紹到這了,更多相關(guān)MySQL鏈路追蹤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL慢查詢優(yōu)化解決問題

    MySQL慢查詢優(yōu)化解決問題

    這篇文章主要介紹了MySQL慢查詢優(yōu)化解決問題,MySQL的慢查詢,全名是慢查詢?nèi)罩?,是MySQL提供的一種日志記錄,用來記錄在MySQL中響應(yīng)時間超過閥值的語句,下文詳細介紹慢查詢的調(diào)優(yōu)情況,需要的小伙伴可以參考一下
    2022-03-03
  • mysql prompt一個特別好用的命令

    mysql prompt一個特別好用的命令

    本篇文章是對mysql中的prompt進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL之MyISAM存儲引擎的非聚簇索引詳解

    MySQL之MyISAM存儲引擎的非聚簇索引詳解

    這篇文章主要為大家詳細介紹了MySQL之MyISAM存儲引擎的非聚簇索引,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • MySQL遞歸查找樹形結(jié)構(gòu)(這個方法太實用了!)

    MySQL遞歸查找樹形結(jié)構(gòu)(這個方法太實用了!)

    對于數(shù)據(jù)庫中的樹形結(jié)構(gòu)數(shù)據(jù),如部門表,有時候,我們需要知道某部門的所有下屬部分或者某部分的所有上級部門,這時候就需要用到mysql的遞歸查詢,下面這篇文章主要給大家介紹了關(guān)于MySQL遞歸查找樹形結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • MySQL5.5版本安裝與安裝失敗詳細講解

    MySQL5.5版本安裝與安裝失敗詳細講解

    MySQL是一款安全、跨平臺、高效的,并與PHP、Java等主流編程語言緊密結(jié)合的數(shù)據(jù)庫系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于MySQL5.5版本安裝與安裝失敗詳細講解的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • MySQL大小寫敏感的注意事項

    MySQL大小寫敏感的注意事項

    MySQL 在 Windows 下不區(qū)分大小寫,但在 Linux 下默認是區(qū)分大小寫。如果你稍加不注意就會出現(xiàn)在本機開發(fā)的程序運行一切正常,發(fā)布到服務(wù)器行就出現(xiàn)表名找不到的問題,一頭霧水。
    2021-05-05
  • 在centos7下安裝和部署java8和mysql

    在centos7下安裝和部署java8和mysql

    一般學習java和部署項目都是在本地部署,但是生產(chǎn)環(huán)境一般都是在linux環(huán)境下,部署和安裝環(huán)境都是在控制臺下進行操作的,沒有windows的可視化的操作界面,對與linux的命令掌握和操作對小白來說都是一個個挑戰(zhàn),記錄下自己的安裝配置過程
    2017-04-04
  • MySQL聚合查詢案例講解

    MySQL聚合查詢案例講解

    這篇文章主要介紹了MySQL聚合查詢案例講解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • MySQL 數(shù)據(jù)類型 大全

    MySQL 數(shù)據(jù)類型 大全

    mysql下的一些數(shù)據(jù)類型,后面附有類型的說明。
    2009-04-04
  • mysql定時任務(wù)(event事件)實現(xiàn)詳解

    mysql定時任務(wù)(event事件)實現(xiàn)詳解

    這篇文章主要介紹了mysql定時任務(wù)(event事件)實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論