哪个更好?mysql的LIKE还是REGEXP?

6

我有一个named_scope中使用了LIKE和NOT LIKE两个条件。与使用REGEXP相比,这种方法在执行上是否更快?

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

1
最好使用 RLIKEREGEXP - xkeshav
3个回答

5

这只是毫秒的差别,几乎不会被注意到。除非您需要处理大量的流量,否则它并不重要。

如果您的方法遇到性能问题,那很可能是因为您的表格有大量的行。瓶颈不在于 LIKE (MySQL 也支持 REGEXP),而在于您的表结构。

无论如何,您应该学习一下 MySQL 索引MySQL 全文搜索


2
据我所知,MySQL的LIKE在这种情况下会使用Boyer-Moore算法,因此与使用触发器将整个表达式存储在is_urgent字段中相比,可能会有轻微优势。然后,您可以在(is_urgent, created_at)上添加索引。

这将取决于他的分配情况。如果有少数紧急项目,规划者将使用索引。 - Denis de Bernardy
如果他获取所有内容,那么它将是文件排序,但如果他分页,那么它将是简单的索引读取/排序 - 而且可以假定他会这样做。 - Denis de Bernardy
他的order_search查询包括所有内容,即使是简单的查询也使用索引,但文件排序无法避免。 - neocanable

1

您的查询不是最左边的查询,因此无法使用索引,所以like和regexp是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接