Mysql

如何改進大桌子上的簡單 LIKE

  • November 4, 2016

我有一個在 MySQL 上執行的面向業務的 Web 應用程序,它在某些頁面上執行這樣的查詢。

SELECT event_user, event_type, event_details
FROM `event_history` 
WHERE `event_details` 
LIKE '%keyword%' 
ORDER BY `event_history_id` 
DESC;

該表現在有 300,000 條記錄並且還在增長。

是否可以提高此查詢的性能?

查詢中的前導“%”禁用索引的使用。隨著您積累更多數據,這將導致性能繼續下降。

您可能需要考慮考慮使用具有適當語法的 FULLTEXT 索引。

如前所述,前導 % 使事情變得棘手,但如果 event_details 欄位包含分隔項目的列表並且您正在搜尋其中一項,那麼您可以創建一個子表 event_history_details ,其中包含 event_details 欄位中每個項目的一行每個事件。

這樣的設置可以很好地擴展並且是 SARGable。不幸的是,它涉及的不僅僅是更改查詢。

引用自:https://dba.stackexchange.com/questions/154302