在MySQL 中最佳化多列LIKE 查詢
在MySQL 中,對多列執行帶有LIKE 條件的SELECT 查詢會顯著影響性能。但是,建立索引可能無法提供預期的加速。
為什麼索引沒有幫助
MySQL 中的索引可以有效地處理文字列的前綴。當使用 LIKE '%text%' 時,查詢無法利用索引,因為它無法預測匹配字串的長度。文字前的字元數可變,導致索引查找無效。
全文搜尋
對於這樣的場景,MySQL 建議使用全文搜尋(FTS)。 FTS 專為搜尋文字欄位而設計,可以處理帶有前導和尾隨通配符的 LIKE 查詢。 FTS 本身可用於 MyISAM 表,並且可以使用外部解決方案針對其他表格類型實作。
對磁碟使用和速度的影響
FTS 需要額外的儲存空間儲存單字出現次數及其對應行 ID 的索引表。雖然這會增加磁碟使用量,但通常不會對 INSERT 和 DELETE 操作產生重大影響,因為它們不涉及文字搜尋。
替代解決方案
如果FTS 不是可行的選擇,則替代解決方案是將列拆分為多個標準化列,每個列代表字串的一部分。這種方法允許對搜尋詞的前綴進行有效的索引使用。但是,它需要架構修改,並且會增加資料庫結構的複雜性。
結論
在 MySQL 中最佳化具有多列的 LIKE 查詢可能具有挑戰性。雖然索引通常很有用,但它們對於 LIKE '%text%' 模式無效。全文搜索是一個功能強大的解決方案,可提供快速高效的文本字段搜索,甚至對於帶有前導和尾隨通配符的查詢也是如此。也可以考慮替代方案,例如列標準化,但它們有自己的權衡。
以上是如何最佳化跨多列的 MySQL LIKE 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!