id (PK/INDEX) + name VARCHAR(255)INSERT 迴圈| 場景 | 耗時 (秒) | 相對基準 | 分析 |
|---|---|---|---|
| 無索純堆表 | 53 | 1.00× | 基準線 |
| INT PRIMARY KEY | 61 | 1.15× | PK 維護成本 +13% |
| INT INDEX (非唯一) | 81 | 1.53× | 二級索引維護 +60% |
| VARCHAR(255) PRIMARY KEY | 216 | 4.08× | 字串比較、分裂、空間放大 |
| VARCHAR(255) INDEX | 218 | 4.11× | 同左,PK/INDEX 差異極小 |
INT 自增 PK + UNIQUE INDEX (字串欄位)-- 原實驗:name = CONCAT('test', id) → 字串前綴相同、後綴遞增
-- 修改:name = CONCAT(id, 'test') → 字串前綴遞增、區分度極高
-- 結果:218s → 160s (降 27%)
結論:字串索引插入效能高度依賴 前綴區分度。高基數前綴 → B+Tree 插入路徑分散 → 頁分裂減少。
INDEX (col(10))、或生成欄位 col_hash INT AS (CRC32(col)) + 索引Handler_write、Innodb_pages_written、Innodb_buffer_pool_pages_dirty索引是雙面刃:查詢加速 ≫ 寫入成本 是核心權衡。量化實測證明:整數自增主鍵成本最低 (1.15×)、字串主鍵成本最高 (4×)。架構設計階段即鎖定「整數 PK + 業務鍵 UNIQUE」模式,寫入效能與查詢靈活性雙贏。