首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪种SQL查询更好,匹配还是相似?

哪种SQL查询更好,匹配还是相似?
EN

Stack Overflow用户
提问于 2009-04-27 09:44:22
回答 1查看 92.8K关注 0票数 70

要在数据库中搜索在"foo_desc“和"bar_desc”列中同时包含关键字"foo“和"bar”的行,我将执行如下操作:

代码语言:javascript
复制
SELECT * 
FROM t1 
WHERE MATCH (t1.foo_desc, t2.bar_desc) AGAINST ('+foo* +bar*' IN BOOLEAN MODE)

代码语言:javascript
复制
SELECT * 
FROM t1 
WHERE (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%foo%') AND (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%bar%')

我预计最后一个查询的缺点是性能。

优点是LIKE查询可以找到'xxfoo‘,而MATCH query不能。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-04-27 09:46:47

更新

MySQL 5.6及更高版本开始,InnoDB表支持Match... Against

第一个是much better。在MyISAM表上,它将对这些列使用全文索引。另一个将执行全表扫描,对每一行进行连接,然后进行比较。

只有在以下情况下,LIKE才是有效的:

  • 列(不是函数的结果,除非您的特定数据库供应商支持函数索引,例如Oracle,并且您正在使用它们);
  • 列的开头(即LIKE 'blah%',而不是LIKE '%blah%');
  • 索引的列。

如果其中任何一个条件不为真,SQL引擎执行查询的唯一方法就是执行全表扫描。这可以在大约10-20000行的情况下使用。除此之外,它很快就会变得不可用。

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

票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/792875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档