MySQL 性能測試

来源:https://www.cnblogs.com/Json159/archive/2019/03/19/10556701.html
-Advertisement-
Play Games

MySQL 查詢優化器有幾個目標,但是其中最主要的目標是儘可能地使用索引,並且使用最嚴格的索引來消除儘可能多的數據行。最終目標是提交 SELECT 語句查找數據行,而不是排除數據行。優化器試圖排除數據行的原因在於它排除數據行的速度越快,那麼找到與條件匹配的數據行也就越快。如果能夠首先進行最嚴格的測試 ...


MySQL 查詢優化器有幾個目標,但是其中最主要的目標是儘可能地使用索引,並且使用最嚴格的索引來消除儘可能多的數據行。最終目標是提交 SELECT 語句查找數據行,而不是排除數據行。優化器試圖排除數據行的原因在於它排除數據行的速度越快,那麼找到與條件匹配的數據行也就越快。如果能夠首先進行最嚴格的測試,查詢就可以執行地更快。

MySql 深化學習

可參考:

 https://blog.csdn.net/qq_38056704/article/details/80030485

https://blog.csdn.net/windanchaos/article/details/78806462

1 explain用法
explain可以幫助我們分析select語句,找出select語句的瓶頸,從而可以針對性地去做優化,讓MySQL查詢優化器更好地工作。

MySQL查詢優化器有幾個目標,其中最主要的目標是儘可能地使用索引,並且使用最嚴格的索引來消除儘可能多的數據行。

使用explain+select語句,會返回以下的一個表,截圖使用的navicat的工具截圖:

 

下麵對上述表的每一列進行說明:

1.1 id列
說明:MySQL Query Optimizer 選定的執行計劃中查 詢的序列號。表示查詢中執行 select 子句或 操作表的順序,id 值越大優先順序越高,越先 被執行。id 相同,執行順序由上至下。

1.2 select_type列
select_type查詢類型

說明

SIMPLE

簡單的select查詢,不使用union及子查詢

PRIMARY

最外層的select查詢

UNION

UNION中的第二個或隨後的select查詢,不依賴外部查詢的結果集

DEPENDENT UNION

UNION 中的第二個或隨後的 select 查詢,依賴於外部查詢的結果集

UNION RESULT

UNION 查詢的結果集

SUBQUERY

子查詢中的第一個 select 查詢,不依賴於外部查詢的結果集

DEPENDENT SUBQUERY

子查詢中的第一個 select 查詢,依賴於外部 查詢的結果集

DERIVED

用於 from 子句里有子查詢的情況。MySQL 會 遞歸執行這些子查詢,把結果放在臨時表裡。

UNCACHEABLE SUBQUERY

結果集不能被緩存的子查詢,必須重新為外 層查詢的每一行進行評估

UNCACHEABLE UNION

UNION 中的第二個或隨後的 select 查詢,屬 於不可緩存的子查詢

 

1.3 TABLE列
說明:輸出行所引用的表。

1.4 TYPE
說明:很重要的列之一,顯示連接使用的類型,按最優到最差的類型排序。

TYPE

說明

system

表僅有一行(=系統表)。這是 const 連接類型 的一個特例。

const

const 用於用常數值比較 PRIMARY KEY 時。當 查詢的表僅有一行時,使用 System。

eq_ref

除 const 類型外最好的可能實現的連接類型。它用在一個索引的所有部分被連接使用並且索引是 UNIQUE 或 PRIMARY KEY,對於每個索引鍵,表中只有一條記錄與之匹配。

ref

連接不能基於關鍵字選擇單個行,可能查找到多個符合條件的行。叫做 ref 是因為索引要跟某個參考值相比較。這個參考值或者是一個常數,或者是來自一個表裡的多表查詢的

結果值。

ref_or_null

如同 ref,但是 MySQL 必須在初次查找的結果

里找出 null 條目,然後進行二次查找。

index_merge

說明索引合併優化被使用了。

unique_subquery

在某些IN查詢中使用此種類型,而不是常規的ref

index_subquery

在某些IN查詢中使用此種類型,與unique_subquery類似,但是查詢的是非唯一性索引。

range

只檢索給定範圍的行,使用一個索引來選擇行。key列顯示使用了哪個索引。

index

全表掃描,只是掃描表的時候按照索引次序進行而不是行。主要優點是避免了排序,但是開銷仍然非常大。

all

最壞的情況,從頭到尾全表掃描。

 

1.5 possible_keys
說明:指出Mysql能在該表中使用哪些索引有助於查詢。如果為空,說明沒有可用的索引。

1.6 key_len
說明:使用的索引的長度,在不損失精確性的情況下,長度越短越好。

1.7 ref
說明:顯示索引的那一列被使用了。

1.8 rows
說明:Mysql認為必須檢查的用來返回請求數據的行數。

1.9 extra
Using filesort

表示MySQL會對結果使用一個外部索引排序,而不是從表裡按索引次序讀到相關內容。

Using Temporary

表示MySQL在對查詢結果排序時使用臨時表,常見於排序order by和分組查詢group by.

 

至於如何去獲取到業務流程中的sql語句,這就需要結合自己公司的實際情況了。
我們公司的日誌是使用log4j,開啟debug模式,每一個操作都會把日誌列印出來,包括mysql。對核心可能存在併發的地方。逐一去排查還是有點作用的。

實操一個:
下圖是我在某業務日誌中捕獲的(所謂捕獲,就是不斷的check)


在當前數據規模下查0.053s。但是如果數據規模一大,這個效率肯定是不行的。
我去看了下的索引,order_id沒有索引。所以,讓研發加了一個order_id 索引。解決問題。
---------------------
作者:windanchaos
來源:CSDN
原文:https://blog.csdn.net/windanchaos/article/details/78806462
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概念 INNER JOIN(內連接):獲取兩個表中欄位匹配關係的記錄。也就是只會返回共有的內容。 LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。 RIGHT JOIN(右連接): 獲取右表所有記錄,即使左表沒有對應匹配的記錄。 示例 先在資料庫中建立兩張表student ...
  • mysql支持的存儲引擎 一:查詢資料庫支持的存儲引擎 執行: show engines; 說明 engine:引擎名稱。 suppot:是否支持。 comment:說明。 transactions:是夠支持事務。 xa:是否支持XA事務。 savepoints:是否支持保存savepoints之間 ...
  • [20190319]shared pool latch與library cache latch的簡單探究.txt--//昨天看Oracle DBA手記3:資料庫性能優化與內部原理解析.pdf 電子書,看了eygle的關於latch之類的測試.--//自己也重覆測試看看.--//首先說明一下11g已經 ...
  • 安裝之前需要先卸載mysql 1.1、下載壓縮包 其中下載地址的獲取方法如下所示 1、打開mysql官網 2、按下圖所示的步驟點擊 3、右鍵下圖標記位置,複製下載地址 1.2、給mysql目錄創建一個用戶組和用戶,併在mysql目錄下創建一個data目錄,具體的操作如下所示 1.3、先解壓包,後進入 ...
  • 在SQL Server中移除了事務日誌文件後,使用sys.master_files檢查時發現,對應的事務日誌文件記錄信息依然存在sys.master_files裡面,只是狀態state_desc為OFFLINE。需要經過一段時間,這條記錄在這個系統視圖才會消失。 DECLARE @db_name N... ...
  • 之前使用mysql都是使用的xampp上面集成的mysql,也在安裝過5.6.35的版本,好像都是下一步下一步就完成了,昨天安裝了一個5.7.25的版本的mysql,也不知道怎麼了,就開始百度一些東西,也不知道不配置這些東西到底能不能用,因為已經按照他們的配置完成了,可以正常運行了,就在此記錄下來, ...
  • innodb外鍵: 1、CASCADE:從父表刪除或更新會自動刪除或更新子表中匹配的行 2、SET NULL:從父表刪除或更新行,會設置子表中的外鍵列為NULL,但必須保證子表列沒有指定NOT NULL 3、RESTRICT:拒絕對父表的刪除或更新操作(如果子表中有匹配的記錄,則不允許對父表對應候選 ...
  • 問題來了。執行SQL語句 如果用來排序的列x、y當中有NULL值,那麼它們的順序是怎樣的呢? 不同的資料庫有不同的答案,目前的主流資料庫大致分為兩派。 一、NULL最大派 這一派包括PostgreSQL、Oracle、DB2等。它們的原則是,排序時NULL比其他的值都要大。 最大派還有一個共性,就是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...