在 MySQL 存儲引擎開發中,info() 函數是優化器獲取表統計信息的關鍵接口。本文解析其調用時機、填充屬性及對查詢計劃的影響。
調用時機與作用
- 觸發點:執行表掃描前,優化器調用
handler::info()
- 核心目的:向優化器提供表級統計信息,輔助生成執行計劃
- 副作用:
SHOW TABLE STATUS 同樣依賴此接口返回數據
關鍵公共屬性詳解(sql/handler.h)
| 屬性 | 類型 | 含義 |
| records | ha_rows | 表中記錄總數(最關鍵屬性) |
| deleted | ha_rows | 已刪除記錄數 |
| data_file_length | ulonglong | 數據文件長度(字節) |
| index_file_length | ulonglong | 索引文件長度(字節) |
| delete_length | ulonglong | 可復用空間大小 |
| auto_increment_value | ulonglong | 下一個自增值 |
| mean_rec_length | ulong | 平均記錄長度 |
| create_time / update_time / check_time | time_t | 建表/更新/檢查時間戳 |
優化器決策邏輯
records 屬性直接影響掃描策略:
records = 0 或 1:優化器認為極小表,可能選擇全表掃描
records >= 2:正常走索引評估路徑
- 外部數據源場景:若無法精確獲取行數,必須返回 ≥2,否則優化器可能做出錯誤決策
實現建議
- 輕量級引擎:維護計數器實時更新
records
- 大數據引擎:採樣估算或異步統計,避免
info() 阻塞
- 必須實現
records、data_file_length、index_file_length 三核心屬性
SHOW TABLE STATUS 顯示數據準確性取決於此接口實現質量
正確實現 info() 是存儲引擎融入 MySQL 優化器體系的基石,直接關係查詢性能與元數據準確性。
- 上一篇文章: MySQL預存程序、函數與復制完整知識庫:相容性、安全性、限制條件深度解析
- 下一篇文章: MySQL插件式儲存引擎架構深度解析:服務器層核心組件與特性矩陣
Copyright ©
程式碼之家 All Rights Reserved