我在一个语句中使用了一个LIKE而不是LIKE的named_scope。与使用REGEXP相比,这在执行方面更快吗?
named_scope :order_search, :order => "name LIKE '%urgent%' AND name NOT LIKE '%not urgent%' DESC, created_at DESC"
答案 0 :(得分:5)
这是几毫秒的差异,不可察觉。除非你处理的是极高的流量,否则无关紧要。
如果您的方法遇到性能问题,可能是因为您的表有大量行。瓶颈不是那么(并且MySQL也支持REGEXP)但你的表结构。
无论如何,您应该阅读MySQL Indexes和MySQL Fulltext Search。
答案 1 :(得分:2)
据我所知,在这种情况下,MySQL的LIKE
将使用Boyer-Moore,因此LIKE
可能会略有优势。
与使用将整个表达式存储在is_urgent
字段中的触发器相比,它可以忽略不计。然后,您可以在(is_urgent, created_at)
上添加索引。
答案 2 :(得分:1)
您的查询不是大多数查询,它无法使用索引 所以喜欢和正则表达式相同