許多應用程式需要在文字正文中搜尋字串。 MySQL 提供了 LIKE 運算子來執行此類搜索,但是我們如何優化這些查詢以獲得最佳效能?
考慮下表:
<code class="sql">CREATE TABLE `example` ( `id` int(11) unsigned NOT NULL auto_increment, `keywords` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;</code>
執行以下查詢時:
<code class="sql">SELECT id FROM example WHERE keywords LIKE '%whatever%'</code>
我們可能會預期資料庫使用索引來加快搜尋速度。但是,如果我們使用以下方法在關鍵字列上新增簡單索引:
<code class="sql">ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);</code>
EXPLAIN 查詢顯示 MySQL 仍然需要掃描整個資料表。
MySQL 透過符合搜尋字串的開頭來使用索引。對於像 LIKE 'whatever%' 這樣的查詢,可以使用索引,因為 'whatever' 錨定在字串的開頭。
但是,像 LIKE '%whatever%' 這樣的查詢沒有這樣的錨。搜尋字詞在字串中「浮動」出現,迫使 MySQL 掃描整個欄位。
為了最佳化這類查詢,我們可以使用全文索引。這些索引是專門為「浮動」搜尋而設計的。 InnoDB 從 5.6.4 版本開始支援全文索引,使其成為優化 LIKE '%string%' 查詢的可行選項。
以上是## 如何使用 InnoDB 最佳化 MySQL LIKE \'%string%\' 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!