MySQL 查詢的成本的檢視
讀《高效能MySQL》第三版,筆記。
MySQL 使用基於成本的優化器,它將嘗試預測一個查詢使用某種執行計劃時的成本,選擇其中成本最小的一個。
最初,成本的最小單位是隨機讀取一個 4K 資料頁的成本,後來(成本計算公式)變得更加複雜,並且引入了一些 “ 因子 ” 來估算某些操作的代價,如當執行一次
WHERE
條件比較的成本。
可以通過查詢當前會話的 last_query_cost
的值來得知 MySQL 計算的當前查詢的成本。
mysql> show status like 'last_query_cost';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| Last_query_cost | 2.399000 |
+-----------------+----------+
1 row in set (0.00 sec)
以上表示需要 2 個資料頁的隨機查詢才能完成上面的查詢。
這是根據一系列的統計資訊計算得來的:
- 每個表或者所有的頁面個數
- 索引的基數(索引中不同值的數量)
- 索引和資料行的長度
- 索引分配情況
優化器評估成本不考慮快取,它假設讀取任何資料都需要一次磁碟 I/O。
有很多原因會導致 MySQL 優化器選擇錯誤的執行計劃:
- 統計資訊不準確。
- 執行計劃中的成本估算不等同於實際執行的成本。
- MySQL 的最優可能和你想的最優不一樣。
- MySQL 從不考慮其他併發執行的查詢,這可能會影響到當前查詢的速度。
- MySQL 也並不是任何時候都是基於成本的優化。
- MySQL 不會考慮不受其控制的操作的成本。
相關文章
- 【MySQL】檢視&子查詢MySql
- 探究MySQL中SQL查詢的成本MySql
- mysql開啟檢視慢查詢日誌MySql
- 查詢基表的相關檢視
- 資料庫的查詢與檢視資料庫
- 使用物化檢視查詢重寫 優化對於 UNION ALL檢視的CONNECT BY查詢優化
- 檢視查詢報錯
- oracle 常用查詢檢視Oracle
- mysql查詢優化檢查 explainMySql優化AI
- 檢視慢查詢進度
- PostgreSQL 查詢成本模型SQL模型
- 【PDB】Oracle跨PDB檢視查詢Oracle
- OushuDB 檢視查詢執行情況
- 【MV】物化檢視查詢重寫
- sql查詢檢視列備註SQL
- 一次系統檢視查詢的優化優化
- 從oracle v$version檢視中查詢os的資訊Oracle
- mysql的子查詢MySql
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- 包含複雜查詢的快速重新整理的物化檢視
- MySQL Case-information_schema檢視查詢慢處理一例MySqlORM
- Access查詢實現Mysql的 limit 查詢MySqlMIT
- 檢視 Laravel 查詢資料語句Laravel
- Linux查詢檢視幫助命令Linux
- 【Oracle】如何查詢檢視時使用索引Oracle索引
- 檢視ip地址的cmd命令 cmd查詢ip地址命令
- 查詢表空間使用情況的簡單檢視
- 【檢視】深入探究 V$PARAMETER的底層查詢內幕
- 管理mysql的檢視MySql
- MySQL 的查詢優化MySql優化
- MySQL的分頁查詢MySql
- 簡單的mysql查詢MySql
- 【MySQL】MySQL進階(外來鍵約束、多表查詢、檢視、備份與恢復)MySql
- RAC:在子查詢使用gv$檢視,有時查詢不出資料
- 查詢real-time apply、real-time query的檢視APP
- v$session/v$process檢視涉及的相關會話資訊的查詢Session會話
- (8)mysql 中的檢視MySql
- oracle資料庫sql查詢檢視第二次查詢很慢Oracle資料庫SQL