呼叫時機
執行表掃描前,伺服器呼叫儲存引擎的 info(),引擎需填充特定屬性供優化器決策。
關鍵屬性清單
| 屬性 | 用途 |
records (ha_rows) | 表列數,**最關鍵**;0/1 列與 ≥2 列會觸發不同優化路徑 |
data_file_length | 資料檔長度 |
index_file_length | 索引檔長度 |
delete_length | 可重用空間(刪除列殘留) |
auto_increment_value | 下一個 AUTO_INCREMENT 值 |
mean_rec_length | 平均列長度 |
create_time / update_time / check_time | 建立/更新/檢查時間 |
raid_chunksize | RAID 區塊大小 |
實作要點
- 若無法即時得知確切列數(如外部資料源),**回傳 ≥2** 避免優化器誤判為空表
- 屬性同時供
SHOW TABLE STATUS 顯示,需保持準確
- 完整定義見
sql/handler.h 中的 handlerton 結構
優化器決策影響
-- 記錄數 = 0 或 1:優化器可能選擇直接讀取而非索引掃描
-- 記錄數 ≥ 2:正常走索引/全表掃描成本評估
因此準確回報 records 對查詢計畫品質至關重要。
- 上一篇文章: MySQL 字元集亂碼徹底解決:UTF-8 最佳實踐與舊資料遷移指南
- 下一篇文章: PostgreSQL 函數參數突破 32 個限制:使用複合類型封裝傳遞
Copyright ©
程式碼之家 All Rights Reserved