常見迷思:LIKE '%keyword%' 中百分號越多查詢越慢?實測證明 百分號數量不影響執行效率,MySQL 優化器會在解析階段將多個連續萬用字元折疊為單一模式。
goods,約 10 萬筆,欄位 goods_name VARCHAR(200) 無索引。| SQL | 耗時 (4次平均) |
|---|---|
WHERE goods_name LIKE '%iPhone%iPod%' | 0.053 |
WHERE goods_name LIKE '%iPhone%' AND goods_name LIKE '%iPod%' | 0.053 |
WHERE goods_name LIKE '%%%%%%%%%iPhone%iPod%%%%%%%%%' | 0.045 |
% 被優化器視為單一「任意字元序列」,執行計畫完全一致 (type=ALL 全表掃描)。MATCH...AGAINST 大幅提速。%keyword) 導致無法使用 B-Tree 索引,若需高效前綴搜尋請改用全文索引或反轉欄位索引。WHERE col LIKE '%kw1%' AND col LIKE '%kw2%'。FULLTEXT INDEX (MySQL 5.6+ InnoDB 支援) 改用 MATCH(col) AGAINST('+kw1 +kw2' IN BOOLEAN MODE)。LIKE '%...%',必要時同步至 Elasticsearch/Meilisearch。