2011-05-27 58 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

查询是不是最左边的查询,它不能使用索引 所以像和正则表达式是相同的