首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 儲存引擎開發:深入解析 info() 函數與最佳化器互動機制

     編輯:MySQL 資料庫相關知識

在 MySQL 儲存引擎開發中,info() 函數是儲存引擎與查詢最佳化器溝通的關鍵橋樑。本文詳細說明其呼叫時機、回傳機制、核心屬性填寫規則,以及對 SHOW TABLE STATUS 的影響。

呼叫時機與資料流向

  • 觸發點: 執行全表掃描前,最佳化器呼叫 info() 取得統計資訊。
  • 資料傳遞: 不透過回傳值,而是填寫儲存引擎類別的公共屬性;info() 返回後,最佳化器直接讀取這些屬性。
  • 雙重用途: 同組屬性同時供 SHOW TABLE STATUS 顯示。

核心公共屬性清單

定義於 sql/handler.h,常用屬性如下:

屬性說明
ulonglong data_file_length資料檔案長度
ulonglong max_data_file_length資料檔案最大長度
ulonglong index_file_length索引檔案長度
ulonglong max_index_file_length索引檔案最大長度
ulonglong delete_length可重複使用空間
ulonglong auto_increment_value下一個 AUTO_INCREMENT 值
ha_rows records表格記錄數(最關鍵)
ha_rows deleted已刪除記錄數
ulong raid_chunksizeRAID 區塊大小
ulong mean_rec_length平均實體記錄長度
time_t create_time建立時間
time_t check_time最後檢查時間
time_t update_time最後更新時間

records 屬性決定最佳化策略

records 指出表格大致行數,最佳化器據此選擇執行計畫:

  • 0 或 1 列: 視為極小表,可能選擇不同存取路徑。
  • ≥ 2 列: 視為一般表格,採用標準最佳化策略。

開發鐵則: 若掃描前無法確知確切行數(如資料由外部填充),必須回傳 ≥ 2,避免最佳化器誤判導致效能退化。

實作建議

  1. 在 info() 中依實際儲存狀態精確填寫各屬性。
  2. 重點維護 records、data_file_length、index_file_length、auto_increment_value。
  3. 若引擎支援交易,確保 update_time、check_time 正確反映狀態。

掌握 info() 機制,能讓自訂儲存引擎在 MySQL 最佳化器中獲得最佳執行計畫,釋放查詢效能潛力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved