2011-05-27 121 views
6

我在一個語句中使用了LIKE和NOT LIKE這個named_scope。與使用REGEXP相比,執行速度更快嗎?哪個更好? MySQL的LIKE或REGEXP?

named_scope :order_search, :order => "name LIKE '%urgent%' AND name NOT LIKE '%not urgent%' DESC, created_at DESC" 
+1

更好地利用'RLIKE'或'REGEXP' – diEcho 2011-05-27 06:37:03

回答

2

,只要我知道,MySQL的LIKE將使用博耶 - 穆爾在這種情況下,所以有可能會稍有優勢LIKE

然而,與使用將整個表達式存儲在is_urgent字段中的觸發器相比,這可以忽略不計。然後您可以在(is_urgent, created_at)上添加索引。

+0

它不是最左邊的查詢,該指數將無法正常工作 – Neo 2011-05-27 06:46:12

+0

這將取決於他的重新分區。如果緊急項目很少,計劃人員將使用索引。 – 2011-05-27 06:48:01

+0

不是,它是文件,而不是索引排序 – Neo 2011-05-27 06:57:26

5

這是毫秒差異,不可忽視。除非你處理的流量極高,否則無關緊要。

如果您的方法遇到性能問題,很可能是因爲您的表格有大量的行。瓶頸不是那麼LIKE(和MySQL也支持REGEXP),但你的表結構。

在任何情況下,您應該閱讀MySQL IndexesMySQL Fulltext Search

1

查詢是不是最左邊的查詢,它不能使用索引 所以像和正則表達式是相同的