当前位置: 首页 > 面试题库 >

如何加快SELECT ..LIKE查询在MySQL中的多列?

陈瀚
2023-03-14
问题内容

我有一个MySQL表,对此SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%'查询非常频繁。任何索引都可以帮助加快速度吗?

表中有几百万条记录。如果有什么方法可以加快搜索速度,是否会严重影响数据库文件对磁盘的使用以及INSERTand
DELETE语句的速度?(UPDATE从未执行过)

更新 :发布后,我很快就看到了很多有关LIKE查询中使用方法的信息和讨论;我想指出,该解决方案 必须 使用LIKE '%text%'(也就是说,我要查找的文本在前面加上%通配符)。由于多种原因,包括安全性,数据库也必须是本地的。


问题答案:

索引不会加快查询的速度,因为对于文本列,索引通过索引从左开始的N个字符来工作。当您喜欢’%text%’时,它不能使用索引,因为在文本之前可以有可变数量的字符。

您应该做的是根本不使用这样的查询。相反,您应该使用MySQL支持MyISAM表的类似FTS(全文搜索)的工具。自己为非MyISAM表创建这样的索引系统也很容易,您只需要一个单独的索引表即可在实际表中存储单词及其相关ID。

更新资料

全文搜索可用于带有MySQL 5.6+的InnoDB表。



 类似资料:
  • 问题内容: 这是我的问题,我正在选择并执行多个联接以获取正确的项目…它吸引了相当多的行,超过100,000。当日期范围设置为1年时,此查询将花费5分钟以上的时间。 我不知道是否可能,但恐怕用户会将日期范围扩展到10年左右并使其崩溃。 有人知道我可以如何加快速度吗?这是查询。 我不是MySQL方面的佼佼者,因此不胜感激! 提前致谢! 更新 这是您要求的解释 我还为table5行和table4行添加了

  • 本文向大家介绍MySQL SELECT...LIKE (%),包括了MySQL SELECT...LIKE (%)的使用技巧和注意事项,需要的朋友参考一下 示例 任意位置的“ adm”: 以“ adm”开头: 以“ adm”结尾: 正如%一个字符LIKE条款任意数目的字符匹配,_匹配字符一个字符。例如, 性能说明如果上有一个索引username,则 LIKE 'adm' 执行与`='adm'相同的

  • 问题内容: 我有一个SQL查询为我提供X个结果,我希望查询输出中有一个叫做count的命令使查询变得像这样: 我怎样才能做到这一点? 问题答案: 好吧,我想这已经足够构成答案了:以下链接指定了两种方法:http : //www.techrepublic.com/blog/microsoft-office/an-access-query-that-returns- every-nth-记录/ 第一种

  • 问题内容: 我得到一张下表: 如果用户搜索“ 1”,则程序将查看具有“ 1”的,然后它将在“ 5”中得到一个值,然后程序将继续在其中搜索“ 5”,并且将得到“ 3”在中,依此类推。因此它将打印出: 如果用户搜索“ 6”,它将打印出: 如何建立一个查询来做到这一点? 问题答案: 编辑 @leftclickben提到的解决方案也是有效的。我们也可以对它使用存储过程。 我们使用临时表存储输出结果,并且由

  • 我有一张有股票价格的桌子。我想查询(与一个特定的时间框架),以分析和获得价格作为一个基础100从第一个值的特定时间框架。目前我有: 这让我返回每一行: 日期 本期第一价格 当日价格 该correclty向我显示了日期、每个日期的价格和该期间(基准)的第一个价格。我如何获得一个字段,该字段是期间的每个价格/第一个价格除以的结果? 我试过了 但这似乎行不通。 谢谢!

  • 问题内容: 我试图找到匹配特定模式的行数。在此示例中,所有以“ 123”开头的内容: 这正在工作: 问题是LIKE会有所不同,所以我试图在脚本中定义它,然后执行查询,但这不起作用: 在第二个示例中,如何使该查询正常工作? 编辑:我也尝试了没有期限(也无法正常工作): 问题答案: 您的语法错误;无需在双引号字符串内放置句点。相反,它应该更像 您可以通过打印出字符串以确认与第一种情况相同来确认这一点。