[翻譯]——MySQL 8.0 Histograms

来源:https://www.cnblogs.com/kerrycode/archive/2019/11/07/11817026.html
-Advertisement-
Play Games

前言: 本文是對這篇博客MySQL 8.0 Histograms的翻譯,翻譯如有不當的地方,敬請諒解,請尊重原創和翻譯勞動成果,轉載的時候請註明出處。謝謝! 英文原文地址:https://lefred.be/content/mysql-8-0-histograms/ 翻譯原文地址:https://w... ...


前言: 本文是對這篇博客MySQL 8.0 Histograms的翻譯,翻譯如有不當的地方,敬請諒解,請尊重原創和翻譯勞動成果,轉載的時候請註明出處。謝謝!

 

英文原文地址:https://lefred.be/content/mysql-8-0-histograms/

 

翻譯原文地址:https://www.cnblogs.com/kerrycode/p/11817026.html

 

 

在MySQL 8.0之前,MySQL缺失了其它關係資料庫中一個眾所周知的功能:優化器的直方圖

 

優化器團隊(Optimizer Team)在越來越多的MySQL DBA的呼聲中實現了這個功能。

 

 

直方圖定義

 

但什麼是直方圖呢?我們來看維基百科的定義吧,直方圖是數值數據分佈的準確表示。 對於RDBMS來說,直方圖是特定列內數據分佈的近似值。因此在MySQL中,直方圖能夠幫助優化器找到最有效的執行計劃。

 

直方圖例子

 

為了說明直方圖是如何影響優化器工作的,我會用dbt3生成的數據來演示。

 

我們準備了一個簡單查詢:

 

SELECT * FROM orders  
  JOIN customer ON o_custkey = c_custkey 
WHERE o_orderdate < '1993-01-01' 
  AND c_mktsegment = "AUTOMOBILE"\G

 

讓我們看一下傳統的執行計劃的EXPLAIN輸出,以及可視化方式(VISUAL one):

 

mysql> EXPLAIN SELECT * FROM orders  
       JOIN customer ON o_custkey = c_custkey 
       WHERE o_orderdate < '1993-01-01' AND c_mktsegment = "AUTOMOBILE"\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: customer
   partitions: NULL
         type: ALL
possible_keys: PRIMARY
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 149050
     filtered: 10.00
        Extra: Using where
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: orders
   partitions: NULL
         type: ref
possible_keys: i_o_custkey,i_o_orderdate
          key: i_o_custkey
      key_len: 5
          ref: dbt3.customer.c_custkey
         rows: 14
     filtered: 30.62
        Extra: Using where
2 rows in set, 1 warning (0.28 sec)

 

我們看到MySQL首先對customer表做了一個全表掃描,並且它的選擇估計記錄(過濾)是10%;

 

 

image

 

接下來讓我們運行這個查詢(我使用了COUNT(*)),然後我們來看看有多少行記錄

 

mysql> SELECT count(*) FROM orders  
       JOIN customer ON o_custkey = c_custkey 
       WHERE o_orderdate < '1993-01-01' AND c_mktsegment = "AUTOMOBILE"\G
*************************** 1. row ***************************
count(*): 45127
1 row in set (49.98 sec)

 

 

創建直方圖

 

現在,我將在表customer上的欄位c_mktsegment上創建一個直方圖

 

mysql> ANALYZE TABLE customer UPDATE HISTOGRAM ON c_mktsegment WITH 1024 BUCKETS;
+---------------+-----------+----------+---------------------------------------------------------+
| Table         | Op        | Msg_type | Msg_text                                                |
+---------------+-----------+----------+---------------------------------------------------------+
| dbt3.customer | histogram | status   | Histogram statistics created for column 'c_mktsegment'. |
+---------------+-----------+----------+---------------------------------------------------------+

 

接下來,我們來驗證查詢的執行計劃:

 

mysql> EXPLAIN SELECT * FROM orders  
               JOIN customer ON o_custkey = c_custkey 
               WHERE o_orderdate < '1993-01-01' AND c_mktsegment = "AUTOMOBILE"\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: orders
   partitions: NULL
         type: ALL
possible_keys: i_o_custkey,i_o_orderdate
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1494230
     filtered: 30.62
        Extra: Using where
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: customer
   partitions: NULL
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: dbt3.orders.o_custkey
         rows: 1
     filtered: 19.84
        Extra: Using where
2 rows in set, 1 warning (1.06 sec)

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

-Advertisement-
Play Games
更多相關文章
  • Windows下Apache+PHP+MySQL搭建web伺服器的方法,windows Server Install Apache PHP MySQL(圖文詳解) ...
  • Linux下Apache網站目錄讀寫許可權的設置 網站目錄文件許可權的設置對網站的安全至關重要,下麵簡單介紹網站目錄文件許可權的基本設定。 我們假設http伺服器運行的用戶和用戶組是www,網站用戶為centos,網站根目錄是/home/centos/web。 方法/步驟 1 我們首先設定網站目錄和文件的 ...
  • 本文原始地址:https://sitoi.cn/posts/46278.html 介紹 Chocolatey 是一種 軟體管理 解決方案,與您在 Windows 上經歷過的任何其他事情都不一樣。它著重於簡單性,安全性和可伸縮性。您可以在 PowerShell 中為任何軟體(不僅僅是安裝程式)編寫一次 ...
  • 我是在原有Windows7系統的台式電腦中安裝了ubuntu 16.04,所以目前這台電腦是雙系統。打開Windows系統時有線網路正常鏈接。但是進入ubuntu 16.04之後網路無法鏈接,右上角是有網路鏈接標識的(這點很重要,說明ubuntu 16.04系統中網卡驅動是好的,也可以進入命令輸... ...
  • **Kali連接不上ssh** 1.修改sshd_ config文件 vim /etc/ssh/sshd_ config 將#PasswordAuthentication yes的註釋去掉 將#PermitRootL ogin prohibit-password的註釋去掉,prohibit-pass ...
  • "電池的NTC功能是什麼" 因為可充電電池在不斷的迴圈充電和放電過程中可能會導致電池溫度的過高,導致電池原始性能下降。為了保持電池性能,密切監測電池溫度非常重要,NTC在充電電池組內部的合適應用中可以起到溫度的監測、控制和補償的使用。 使用NTC熱敏電阻監測電池的溫度,可以放心的控制鋰電池或者鎳氫電 ...
  • 故障現象: 使用vim修改文件報錯,系統提示如下: E37: No write since last change (add ! to override) 故障原因: 文件為只讀文件,無法修改。 解決辦法: 使用命令:w!強制存檔即可,在vim模式下,鍵入以下命令: :w!(強制寫入) :q! (強 ...
  • 在很多異常情況下,比如高併發、網路糟糕的時候,資料庫里偶爾會出現重覆的記錄。 假如現在有一張書籍表,結構類似這樣 在異常情況下,可能會出現下麵這樣的記錄 但是,想了想,自己在處理相關數據的時候也加了判重的相關邏輯,比如,新增時當圖書 name 相同時,會提示圖書重覆而返回。 初次遇到這個情況的時候, ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...