Mysql

LIKE 是如何實現的?

  • April 9, 2018

誰能解釋一下 LIKE 運算符是如何在目前數據庫系統(例如 MySQL 或 Postgres)中實現的?或指出一些解釋它的參考資料?

天真的方法是檢查每條記錄,在感興趣的欄位上執行正則表達式或部分字元串匹配,但我有一種感覺(希望)這些系統會做一些更聰明的事情。

不,這幾乎就是他們正在做的事情。現在,如果沒有前導萬用字元並且該欄位被索引,這是通常的情況,數據庫引擎可以將正則表達式應用於索引。所以,例如,如果你寫

SELECT *
 FROM employees
WHERE last_name LIKE 'Cav%'

數據庫可以使用索引LAST_NAME來查找姓氏以“Cav”開頭的所有行。另一方面,如果你有類似的東西

SELECT *
 FROM employees
WHERE last_name LIKE '%av%'

數據庫必須掃描整個表(或整個索引)並根據完整LAST_NAME值評估表達式。顯然,這是非常昂貴的。

大多數更好的關係數據庫都具有通過建構不同類型的索引和文本目錄以更有效的方式進行全文搜尋的設施,但這些不使用 LIKE 關鍵字。例如,這是一篇很好的文章,討論了 PostgreSQL 中的全文搜尋

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