我正在Laravel中构建一个应用程序。我无法决定使用Match()
或Like
进行文字搜索。
我只想在一列上进行文字搜索,即Varchar(42)
。
我还会通过一些Where()
语句过滤掉查询,因此不会对所有行进行文本搜索。
我使用的是mysql 5.6+,因此Match可与我的innobd引擎配合使用。
Match()在包含大约30k行的表中是否表现良好?
Laravel ORM不支持匹配,因此我的查询如下所示:
$q = Input::get('query');
Post::whereRaw("MATCH(title) AGAINST(? IN BOOLEAN MODE)", array($q))->get();
我是否需要消毒" $ q"为了安全地从SQL注入?因为我正在使用whereRaw()
答案 0 :(得分:1)
这两种功能完全不同,因此选择应该很容易。 MATCH
专注于文字中的文字。因此,如果您想要按一个或多个字词搜索,那么MATCH
应该更快。但是,MATCH
专注于单词,因此搜索数字,停用单词和短语需要额外的努力。
LIKE
通常无法使用索引。这会减慢此类查询,因为每行都需要处理。当然,如果剩下的过滤将这个减少到100行,那么这不是什么大问题。
此外,LIKE
可以使用"前缀"的索引。搜索 - 即在字符串的开头搜索。因此,LIKE 'abc%'
可以使用索引。 “喜欢'%abc%'不能。