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

深入理解 MySQL 存儲引擎 info() 函數實現機制

     編輯:MySQL 資料庫相關知識

在 MySQL 存儲引擎開發中,info() 函數是優化器獲取表統計信息的關鍵接口。本文解析其調用時機、填充屬性及對查詢計劃的影響。

調用時機與作用

  • 觸發點:執行表掃描前,優化器調用 handler::info()
  • 核心目的:向優化器提供表級統計信息,輔助生成執行計劃
  • 副作用:SHOW TABLE STATUS 同樣依賴此接口返回數據

關鍵公共屬性詳解(sql/handler.h)

優化器決策邏輯

records 屬性直接影響掃描策略:

  • records = 0 或 1:優化器認為極小表,可能選擇全表掃描
  • records >= 2:正常走索引評估路徑
  • 外部數據源場景:若無法精確獲取行數,必須返回 ≥2,否則優化器可能做出錯誤決策

實現建議

  1. 輕量級引擎:維護計數器實時更新 records
  2. 大數據引擎:採樣估算或異步統計,避免 info() 阻塞
  3. 必須實現 records、data_file_length、index_file_length 三核心屬性
  4. SHOW TABLE STATUS 顯示數據準確性取決於此接口實現質量

正確實現 info() 是存儲引擎融入 MySQL 優化器體系的基石,直接關係查詢性能與元數據準確性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性類型含義
recordsha_rows表中記錄總數(最關鍵屬性)
deletedha_rows已刪除記錄數
data_file_lengthulonglong數據文件長度(字節)
index_file_lengthulonglong索引文件長度(字節)
delete_lengthulonglong可復用空間大小
auto_increment_valueulonglong下一個自增值
mean_rec_lengthulong平均記錄長度
create_time / update_time / check_timetime_t建表/更新/檢查時間戳