」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > ## 如何使用 InnoDB 最佳化 MySQL LIKE \'%string%\' 查詢?

## 如何使用 InnoDB 最佳化 MySQL LIKE \'%string%\' 查詢?

發佈於2024-11-01
瀏覽:744

## How Can I Optimize MySQL LIKE \'%string%\' Queries with InnoDB?

優化 InnoDB 中的 MySQL LIKE '%string%' 查詢

許多應用程式需要在文字正文中搜尋字串。 MySQL 提供了 LIKE 運算子來執行此類搜索,但是我們如何優化這些查詢以獲得最佳效能?

問題

考慮下表:

CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL auto_increment,
`keywords` varchar(200) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

執行以下查詢時:

SELECT id FROM example WHERE keywords LIKE '%whatever%'

我們可能期望資料庫使用索引來加快搜尋速度。但是,如果我們使用以下方法在關鍵字列上新增一個簡單索引:

ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);

EXPLAIN 查詢顯示: MySQL 仍然需要掃描整個表格。

解決方案

MySQL 透過匹配搜尋字串的開頭來使用索引。對於像 LIKE 'whatever%' 這樣的查詢,可以使用索引,因為 'whatever' 錨定在字串的開頭。

但是,像 LIKE '%whatever%' 這樣的查詢沒有這樣的錨定。搜尋字詞在字串中「浮動」出現,迫使MySQL掃描整個欄位。

為了優化此類查詢,我們可以使用全文索引。這些索引是專門為「浮動」搜尋而設計的。 InnoDB 從 5.6.4 版本開始支援全文索引,使其成為優化 LIKE '%string%' 查詢的可行選項。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3