MySql无法在LIKE和MATCH之间进行文本搜索

时间:2015-02-08 14:10:22

标签: php mysql sql laravel

我正在Laravel中构建一个应用程序。我无法决定使用Match()Like进行文字搜索。

我只想在一列上进行文字搜索,即Varchar(42)

我还会通过一些Where()语句过滤掉查询,因此不会对所有行进行文本搜索。

我使用的是mysql 5.6+,因此Match可与我的innobd引擎配合使用。

  1. Match()在包含大约30k行的表中是否表现良好?

  2. Laravel ORM不支持匹配,因此我的查询如下所示:

    $q = Input::get('query');
    Post::whereRaw("MATCH(title) AGAINST(? IN BOOLEAN MODE)", array($q))->get();
    
  3. 我是否需要消毒" $ q"为了安全地从SQL注入?因为我正在使用whereRaw()

1 个答案:

答案 0 :(得分:1)

这两种功能完全不同,因此选择应该很容易。 MATCH专注于文字中的文字。因此,如果您想要按一个或多个字词搜索,那么MATCH应该更快。但是,MATCH专注于单词,因此搜索数字,停用单词和短语需要额外的努力。

LIKE通常无法使用索引。这会减慢此类查询,因为每行都需要处理。当然,如果剩下的过滤将这个减少到100行,那么这不是什么大问题。

此外,LIKE可以使用"前缀"的索引。搜索 - 即在字符串的开头搜索。因此,LIKE 'abc%'可以使用索引。 “喜欢'%abc%'不能。