开发者社区> 问答> 正文

MATCH AGAINST或LIKE哪个SQL查询更好??mysql

要在数据库中搜索在任何列“ foo_desc”和“ bar_desc”中同时具有关键字“ foo”和“ bar”的行,我将执行以下操作:

SELECT * FROM t1 WHERE MATCH (t1.foo_desc, t2.bar_desc) AGAINST ('+foo* +bar*' IN BOOLEAN MODE) 要么

SELECT * FROM t1 WHERE (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%foo%') AND (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%bar%') 我希望最后一个查询的缺点是性能。

好的一面是,LIKE查询找到了“ MATGA AGAINST”找不到的“ xxfoo”。

哪一个是首选,还是有更好的解决方案?

展开
收起
保持可爱mmm 2020-05-17 18:52:33 1057 0
1 条回答
写回答
取消 提交回答
  • 更新资料 从表开始MySQL 5.6,InnoDB表支持Match... Against。

    第一个要好得多。在MyISAM表上,它将对这些列使用全文本索引。另一个将进行全表扫描,在每一行上进行合并,然后进行比较。

    LIKE 仅在针对以下情况这样做才有效:

    列(不是功能的结果,除非您的特定数据库供应商支持功能索引(例如,Oracle)并且您正在使用它们); 列的开始(即LIKE 'blah%'与相对LIKE '%blah%');和 被索引的列。 如果其中任何一个条件都不成立,则SQL引擎执行查询的唯一方法是进行全表扫描。这可以在大约1万到2万行下使用。除此之外,它很快变得不可用。

    注意:在MySQL上,MATCH的一个问题是它似乎只能与整个单词匹配,因此搜索“ bla”不会匹配值为“ blah”的列,但是搜索“ bla *”会匹配。来源:stack overflow

    2020-05-17 18:56:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像