MATCH AGAINST 和 LIKE 哪个 SQL 查询更好?

2023-11-21

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

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

or

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 AGAINST 找不到。

哪一个是首选或者有更好的解决方案?


Update

As of MySQL 5.6然后,InnoDB桌子支撑Match... Against.


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

LIKE仅当您针对以下情况进行操作时才有效:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATCH AGAINST 和 LIKE 哪个 SQL 查询更好? 的相关文章

  • 如何使用flyway将数据从一个DB迁移到另一个DB?

    我在不同的服务器上有两个 postgreSql DB 比如说 A 和 B 我可以使用 Flyway 一些如何将所有数据从 DB A 复制到新设置且为空的 B 如果有人指出我正确的方向和工具 这将很有帮助 要求是通过某种工具自动化将数据从一个
  • 按时间戳字段中的日期过滤结果

    我已经获得了一些帮助 但不确定为什么这不起作用 我正在尝试使用表单让用户过滤他们的活动 存储在数据库中 My code GET from 01 11 2013 GET to 25 11 2013 from DateTime createFr
  • 查找一列中具有相同值而另一列中具有其他值的行?

    我有一个 PostgreSQL 数据库 将用户存储在users他们参与的表格和对话conversation桌子 由于每个用户可以参与多个对话 并且每个对话可以涉及多个用户 因此我有一个conversation user链接表来跟踪哪些用户正
  • 选择表中的人员并排除妻子,但合并他们的名字

    我有一张桌子Person PersonID FirstName LastName 1 John Doe 2 Jane Doe 3 NoSpouse Morales 4 Jonathan Brand 5 Shiela Wife And a R
  • 如何在 SQL 中的时区中使用“America/New_York”

    我有这段代码在 SQL 中运行良好 但是我想使用不同的时区格式 例如 America New York 代替 US Eastern Standard Time SELECT TODATETIMEOFFSET CAST CURRENT TIM
  • 通过“SELECT”命令选择每组的前两条记录的最佳方法是什么?

    例如我有下表 id group data 1 1 aaa 2 1 aaa 3 2 aaa 4 2 aaa 5 2 aaa 6 3 aaa 7 3 aaa 8 3 aaa 通过 SELECT 命令选择每组的前两条记录的最佳方法是什么 如果没有
  • 导出 Azure SQL 数据库时出现错误 SQL71501

    导出 Azure SQL 数据库时出现奇怪的错误 导出一直工作正常 直到最近发生一些架构更改 但现在出现错误 SQL71501 该数据库是V12 兼容性级别130 尽管master数据库仍兼容级别 120 该问题似乎是由一个新的表值函数引起
  • SQL:使用相等的键和最近的键进行连接(类似于 Pandas 的合并)

    例如 我有2个这样的表 对于表 1 中的每一行 我想获取该行 same customer id and nearest date 就我而言 table2 date lt table1 date 结果应该是这样的 我怎样才能在 SQL 中做到
  • Visual Studio 2008 (C#) 与 SQL Compact Edition 数据库错误:26

    与网络相关或特定于实例的 建立时发生错误 连接到 SQL Server 服务器 未找到或无法访问 验证实例名称是否为 正确并且 SQL Server 是 配置为允许远程 连接 提供商 SQL 网络 接口 错误 26 错误定位 指定服务器 实
  • SQL 删除自动命名约束

    我使用脚本在表上创建了一些约束 但未指定约束名称 结果 我最终受到了像这样的限制FK DOC OBGS kntr 54E63309例如 是否可以在不指定确切的约束名称的情况下删除该约束 例如 类似这样的东西 不起作用 ALTER TABLE
  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • 在源代码管理中管理我的数据库

    由于我正在处理一个新的数据库项目 在 VS2008 中 而且我从未从头开始开发数据库 因此我立即开始研究如何在源代码管理 在本例中为 Subversion 中管理数据库 我找到了一些关于SO的信息 包括这篇文章 保持多个环境中的开发数据库同
  • varchar(20) 和 varchar(50) 相同吗?

    我看到评论 如果 varchar 20 列中有 5000 万个 10 到 15 个字符之间的值 而 varchar 50 列中有同样的 5000 万个值 它们将占用完全相同的空间 这就是重点varchar 而不是 char 有人可以告诉我原
  • 不使用窗口函数实现 SQL 查询

    我读过 可以通过创造性地使用连接等来实现在 SQL 窗口函数中可以执行的任何操作 但我不知道如何实现 我在这个项目中使用 SQLite 它目前没有窗口函数 我有一个有四列的表 CREATE TABLE foo id INTEGER PRIM
  • 如何在 mysql 中两次连接同一个表?

    我有2张桌子 其中一个 域 具有域 ID 和域名 dom id dom url 另一列包含实际数据 其中 2 列需要 TO 和 FROM 域名 所以我有 2 列 rev dom from 和 rev dom for 它们都存储域表中的域名
  • 编写多个mysql脚本

    是否可以在复合脚本中包含其他 mysql 脚本 理想情况下 我不想为包含的脚本创建存储过程 对于较大的项目 我想分层维护几个较小的脚本 然后根据需要组合它们 但现在 我很乐意学习如何包含其他脚本 source是一个内置命令 您可以在 MyS
  • 如何授予用户访问 SQL Server 中的 sys.master_files 的权限?

    我需要授予数据库用户读取权限sys master files桌子 我怎样才能做到这一点 目前用户拥有以下权限 Calling SELECT on sys master files返回空结果 我还使用以下命令测试了相同的查询sa用户按预期工作
  • Oracle中如何转义单引号? [复制]

    这个问题在这里已经有答案了 我有一列包含某些存储为文本字符串的表达式 其中包括单个引号 例如 错过的交易 包括引号 发生这种情况时如何使用 where 子句 select from table where reason missed tra
  • 获取MySql中重复行的列表

    我有一张这样的桌子 ID nachname vorname 1 john doe 2 john doe 3 jim doe 4 Michael Knight 我需要一个查询 该查询将从具有相同 nachname 和 vorname 的记录
  • 尝试在本地主机上测试我的 php 文件,但只出现一个空白页面,没有错误消息

    我正在运行 Apache 和 mySQL 因为我检查了所有日志 似乎没有任何错误 我的目标是每当有新的表单条目时就向特定地址发送电子邮件 我对后端和 PHP 缺乏经验 所以我不太确定哪里出了问题 任何帮助将不胜感激

随机推荐

  • 一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性[重复]

    这个问题在这里已经有答案了 我在使用代码优先方法为数据库播种时遇到此错误 一个或多个实体的验证失败 有关更多详细信息 请参阅 EntityValidationErrors 属性 说实话我不知道如何检查验证错误的内容 Visual Studi
  • 双向多对多关系中的循环引用

    我的实体中存在双向多对多关系 请参阅下面的示例 public class Collaboration JsonManagedReference COLLABORATION TAG private Set
  • Meteor 通过邮件查询其他用户

    我正在尝试使用以下命令通过电子邮件查询用户Meteor users findOne emails address email protected 它在 mongo shell 中工作 但在 Meteor 中返回未定义 有任何想法吗 UPDA
  • 固定元素在 Chrome 中消失

    当在我构建的网站上滚动时 使用 CSS 属性position fixed按预期工作 将导航栏保留在页面的最顶部 然而 在 Chrome 中 如果您使用导航栏中的链接 有时消失 通常 您单击的项目仍然可见 但并非总是如此 有时整个事情都会消失
  • AVPlayer 顶部绘制按钮

    我必须在视频顶部绘制标签或按钮relay next previous leave comment 视频列表有它 一旦用户从表中选择一项 就需要播放 播放器播放完成后 这些按钮或标签应该出现在视频顶部 这是我的代码 comPlayerCont
  • 在 LINQ 查询中使用 DateTime?.Value.TimeOfDay

    我正在尝试在 ASP NET MVC 3 上使用 LINQ 进行查询 我有一个模型 我们称之为事件 此 Event 对象有一个 Date 属性 即 DateTime 我想要的是获取 2 个时间跨度之间的事件 现在我的代码如下所示 TimeS
  • 对 3 个具有关系的实体进行建模

    假设我们的环境中有三个实体 Teacher Student and Course 每位教师拥有 教授 1 门或以上课程 且每门课程由 0 名或以上教师提供 每个学生已选修 1 门或多门课程 每门课程由 0 名或更多学生选修 每个教师有 0
  • 使用 AndroidHttpClient 的 SSL/TLS 协议和密码套件

    编辑 如果我原来的帖子措辞不好 我深表歉意 这导致了一些混乱 表现为对原始帖子的评论 那么让我再试一次 我从一个问题开始 我想解决 Android 上的问题 但不知道如何解决 我花了很多时间在网上寻找解决方案 但没有发现任何关于这个问题的讨
  • 如何使用 CMake 链接到 C 数学库?

    我如何添加math库到我的 CMake 文件 这post参考文献添加一个目标链接库 但我对 C An 不太熟悉附加帖子 有人可以举个例子吗 文档我正在使用 C 并且收到一个undefined reference to pow 使用数学标题的
  • 同一页面上具有相同选项的多个传单地图

    我对 leaflet js 还很陌生 我试图弄清楚如何将具有相同选项和图层集的相同地图分配给不同的 HTML 容器 而不必每次都删除并添加新的容器 我曾经处理 Open Layers 2 13 并且我有 map render div 每次我
  • phpmyadmin:如何取消导入大数据库的时间限制

    如何删除 phpmyadmin 中导入操作的时间限制 由于限制 我无法上传大数据库 我必须再次登录数据库 Thanks 我使用MySQLBigDump 昨天对我来说效果很好
  • 带注释的控制器中的动态命令类

    从 Spring MVC 3 开始 AbstractCommandController已弃用 因此您不能再在中指定命令类setCommandClass 相反 您可以在请求处理程序的参数列表中对命令类进行硬编码 例如 RequestMappi
  • 如何合并/扩展不同 JAR 中的持久性单元?

    我将 JPA 持久性用于我的数据模型 并使用 Eclipselink 作为持久性提供程序 我有一个模块化 OSGi 应用程序 其中一个模块包含标准数据模型和一个持久单元 该单元自动包含包中的所有实体 持久性提供程序位于另一个模块中 该模块运
  • MySQL 中的交集

    我有两个表 记录和数据 记录有多个字段 名字 姓氏等 这些字段中的每一个都是存储实际值的数据表的外键 我需要搜索多个记录字段 下面是一个使用 INTERSECT 的示例查询 但我需要一个可以在 MySQL 中运行的查询 SELECT rec
  • 从 Android Activity 调用 javascript 函数

    我想从 android 活动调用 javascript 函数 但它似乎不起作用 我使用了 android webview 函数 webview loadUrl javascript function 这是我的安卓代码 package com
  • 在 Delphi XE 中构建事件宏

    根据Delphi的帮助文件 当我打开对话框将构建事件添加到项目选项时 该对话框应显示我可以在构建事件的命令行上使用的宏 占位符 列表 当我在 Delphi XE 中尝试此操作时 宏列表为空 帮助文件也没有说明哪些宏可用 我可以找到 那么 哪
  • 如何将字符串转换为字典或列表?

    我有诸如以下的字符串 1 2 3 and a 1 b 2 如何将它们转换为列表 字典 有人提到ast literal eval or eval可以解析转换为列表 字典的字符串 有什么区别ast literal eval and eval a
  • Firestore - 检查模块与服务器的连接状态

    我注意到关闭互联网连接并重新打开后 while my Android app仍在运行 无论是否在后台 则需要Firestore模块需要很长时间才能重新获得与服务器的连接 大约一分钟 并且我无法进行任何操作Firestore操作直到恢复连接
  • 如何将 groupby.first() 与变换函数一起使用

    我想使用 groupby first 函数查找组的第一个非空值并将该值转换为组中的每一行 我尝试过以下代码 import pandas as pd import numpy as np raw data col1 a a a b b b b
  • MATCH AGAINST 和 LIKE 哪个 SQL 查询更好?

    要在数据库中搜索 foo desc 和 bar desc 任意列中同时具有关键字 foo 和 bar 的行 我会执行以下操作 SELECT FROM t1 WHERE MATCH t1 foo desc t2 bar desc AGAINS