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

MySQL 簡單查詢效能實測:110 萬筆資料對比索引、LIKE 模式、函數查詢與字元集影響

     編輯:MySQL 資料庫相關知識

建立 110 萬筆測試資料 (102 MB),在 phpMyAdmin 執行 5 類查詢並測量耗時,對比**有無索引**、**LIKE 前綴/後綴**、**函數查詢**對效能的真實影響,數據直觀揭示索引價值與查寫陷阱。

測試環境

  • 資料表:id (PK), col1 (VARCHAR), col2 (TEXT), col3 (DATETIME)
  • 資料量:1,100,000 列,表大小 102 MB
  • 工具:phpMyAdmin 內建 SQL 查詢器 (含網路延遲)

測試結果彙總 (單位:秒)

查詢類型有索引無索引倍數差異
A. 字元欄位精確比對0.00050.3439**688x**
B. 主鍵精確查詢0.00050.0004~1x (PK 預設索引)
C. 函數查詢 (如 SUBSTRING)0.44820.4882~1x (**索引失效**)
D. LIKE 'xxx%' (前綴)0.00070.3487**498x**
E. LIKE '%xxx%' (後綴/中間)0.73610.7339~1x (**索引失效**)

關鍵發現與解讀

  1. 索引對精確比對、前綴 LIKE 極其有效:加速 500~700 倍,將全表掃描轉為 Index Seek。
  2. 主鍵查詢無索引也極快:InnoDB 聚集索引即主鍵,預設即有序儲存。
  3. 函數查詢 (C) 導致索引失效:WHERE SUBSTRING(col,1,3)='abc' 無法使用索引,與無索引同速。
  4. 後綴/中間 LIKE (E) 索引失效:WHERE col LIKE '%abc%' 需掃描全表,索引無用。
  5. 前綴 LIKE (D) 可用索引:WHERE col LIKE 'abc%' 可走索引範圍掃描。

實務優化指南

場景優化策略
精確比對 / 前綴 LIKE**建立 B-Tree 索引** (單欄或複合)
函數查詢改寫為範圍查詢:WHERE col >= 'abc' AND col < 'abd';或建立**函數索引** (MySQL 8.0+ 支援)
全文/模糊搜尋使用**全文索引** (MATCH...AGAINST) 或 **ngram 解析器** (5.7+)
後綴 LIKE 必須支援反轉欄位儲存 (REVERSE) + 前綴 LIKE;或外部搜尋引擎 (Elasticsearch)

索引建立成本提醒

  • 測試中對 TEXT 欄位建立索引曾導致系統近乎卡死,**大型文字欄位慎用索引**,改用全文索引或外部引擎。
  • 每張表理論上限 16 個索引 (MyISAM) / 64 個 (InnoDB),但**過多索引拖慢寫入**,實務建議 ≤ 5 個。

結論

**「索引是讀取加速器,也是寫入負擔」**。針對高頻精確查詢、前綴 LIKE 建立索引;避免函數包裝索引欄位、後綴 LIKE;大型文字改用全文索引。以實測數據驅動索引設計,才能在讀寫平衡點上最大化效能。

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