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

關(guān)于MySQL中的查詢開銷查看方法詳解

 更新時間:2018年07月06日 10:55:59   作者:學習日志  
一個查詢通??梢杂泻芏喾N執(zhí)行方式,并且返回同樣的結(jié)果,而好的程序員應該是找到最好的方式,下面這篇文章主要給大家介紹了關(guān)于MySQL中查詢開銷查看方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

MySQL邏輯架構(gòu)

如果能在頭腦中構(gòu)建一幅MySQL各組件之間如何協(xié)同工作的架構(gòu)圖,有助于深入理解MySQL服務器。下圖展示了MySQL的邏輯架構(gòu)圖。

MySQL邏輯架構(gòu),來自:高性能MySQL

MySQL邏輯架構(gòu)整體分為三層,最上層為客戶端層,并非MySQL所獨有,諸如:連接處理、授權(quán)認證、安全等功能均在這一層處理。

MySQL大多數(shù)核心服務均在中間這一層,包括查詢解析、分析、優(yōu)化、緩存、內(nèi)置函數(shù)(比如:時間、數(shù)學、加密等函數(shù))。所有的跨存儲引擎的功能也在這一層實現(xiàn):存儲過程、觸發(fā)器、視圖等。

最下層為存儲引擎,其負責MySQL中的數(shù)據(jù)存儲和提取。和Linux下的文件系統(tǒng)類似,每種存儲引擎都有其優(yōu)勢和劣勢。中間的服務層通過API與存儲引擎通信,這些API接口屏蔽了不同存儲引擎間的差異。

MySQL使用基于成本的優(yōu)化器,它嘗試預測一個查詢使用某種執(zhí)行計劃時的成本,并選擇其中成本最小的一個。在MySQL可以通過查詢當前會話的last_query_cost的值來得到其計算當前查詢的成本。

示例代碼

mysql> select * from t_message limit 10;
...省略結(jié)果集

mysql> show status like 'last_query_cost';
+-----------------+-------------+
| Variable_name | Value |
+-----------------+-------------+
| Last_query_cost | 6391.799000 |
+-----------------+-------------+

示例中的結(jié)果表示優(yōu)化器認為大概需要做6391個數(shù)據(jù)頁的隨機查找才能完成上面的查詢。這個結(jié)果是根據(jù)一些列的統(tǒng)計信息計算得來的,這些統(tǒng)計信息包括:每張表或者索引的頁面?zhèn)€數(shù)、索引的基數(shù)、索引和數(shù)據(jù)行的長度、索引的分布情況等等。

有非常多的原因會導致MySQL選擇錯誤的執(zhí)行計劃,比如統(tǒng)計信息不準確、不會考慮不受其控制的操作成本(用戶自定義函數(shù)、存儲過程)、MySQL認為的最優(yōu)跟我們想的不一樣(我們希望執(zhí)行時間盡可能短,但MySQL值選擇它認為成本小的,但成本小并不意味著執(zhí)行時間短)等等。

這里last_query_cost的值是io_cost和cpu_cost的開銷總和,它通常也是我們評價一個查詢的執(zhí)行效率的一個常用指標。

(1)它是作為比較各個查詢之間的開銷的一個依據(jù)。

(2)它只能檢測比較簡單的查詢開銷,對于包含子查詢和union的查詢是測試不出來的。

(3)當我們執(zhí)行查詢的時候,MySQL會自動生成一個執(zhí)行計劃,也就是query  plan,而且通常有很多種不同的實現(xiàn)方式,它會選擇最低的那一個,而這個cost值就是開銷最低的那一個。

(4)它對于比較我們的開銷是非常有用的,特別是我們有好幾種查詢方式可選的時候。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • MySQL8新特性:自增主鍵的持久化詳解

    MySQL8新特性:自增主鍵的持久化詳解

    MySQL8.0 GA版本發(fā)布了,展現(xiàn)了眾多新特性,下面這篇文章主要給大家介紹了關(guān)于MySQL8新特性:自增主鍵的持久化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-07-07
  • mysql啟動失敗之mysql服務無法啟動(服務沒有報告任何錯誤)的解決方法

    mysql啟動失敗之mysql服務無法啟動(服務沒有報告任何錯誤)的解決方法

    作為一名程序猿,必不可少的便是和mysql打交道,那當mysql故障,服務無法啟動時該怎么解決呢,下面這篇文章主要給大家介紹了關(guān)于mysql啟動失敗之mysql服務無法啟動,服務沒有報告任何錯誤的解決方法,需要的朋友可以參考下
    2022-05-05
  • 詳解MySQL中的事務與ACID特性

    詳解MySQL中的事務與ACID特性

    這篇文章主要為大家介紹了Mysql?中的事務,包括事務的基本概念和?ACID?特性、事務的隔離級別和具體實現(xiàn)方法等,并提供相應的代碼示例,希望對大家有所幫助
    2023-05-05
  • 怎樣安全地關(guān)閉MySQL實例

    怎樣安全地關(guān)閉MySQL實例

    這篇文章主要介紹了怎樣安全地關(guān)閉MySQL實例,文中講解非常細致,幫助大家更好的理解和學習MySQL,感興趣的朋友可以了解下
    2020-07-07
  • 關(guān)于MySQL中Update使用方法舉例

    關(guān)于MySQL中Update使用方法舉例

    這篇文章主要給大家介紹了關(guān)于MySQL中Update使用方法的相關(guān)資料,更新數(shù)據(jù)是使用數(shù)據(jù)庫時最重要的任務之一,在本教程中您將學習如何使用MySQL UPDATE語句來更新表中的數(shù)據(jù),需要的朋友可以參考下
    2023-11-11
  • MySQL虛擬列的具體使用

    MySQL虛擬列的具體使用

    虛擬列是一種特殊類型的表列,它不像普通列直接存儲數(shù)據(jù),而是根據(jù)其他列中的數(shù)據(jù)動態(tài)生成,本文主要介紹了MySQL虛擬列的具體使用,感興趣的可以了解一下
    2024-09-09
  • linux 之centos7搭建mysql5.7.29的詳細過程

    linux 之centos7搭建mysql5.7.29的詳細過程

    這篇文章主要介紹了linux 之centos7搭建mysql5.7.29的詳細過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • MySQL學習之數(shù)據(jù)更新操作詳解

    MySQL學習之數(shù)據(jù)更新操作詳解

    這篇文章我們將學習一下用于數(shù)據(jù)更改的 “UPDATE” 語句, “UPDATE” 語句也是屬于 DML 這一類數(shù)據(jù)庫操作語言,感興趣的可以了解一下
    2022-08-08
  • MySQL約束constraint用法詳解

    MySQL約束constraint用法詳解

    大家都知道MySQL中經(jīng)常會需要創(chuàng)建父子表之間的約束,下面這篇文章主要給大家介紹了關(guān)于MySQL約束constraint用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • MySQL的主從復制步驟詳解及常見錯誤解決方法

    MySQL的主從復制步驟詳解及常見錯誤解決方法

    這篇文章主要介紹了MySQL的主從復制步驟詳解及常見錯誤解決方法,文中主張同步時跳過臨時錯誤,并對Slave_IO_Running: No錯誤的解決給出了方案,需要的朋友可以參考下
    2016-02-02

最新評論