繁体   English   中英

在SQL Like表达式中使用更长的字符串是否允许阻碍或帮助查询执行速度?

Does having a longer string in a SQL Like expression allow hinder or help query executing speed?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个db查询,它会导致使用like子句进行全表扫描,并遇到一个我很好奇的问题......

以下哪项应该在Mysql中运行得更快,或者它们都以相同的速度运行? 在我的案例中,基准测试可能会回答它,但我想知道答案的原因。 正在过滤的列包含几千个字符,如果这很重要的话。

SELECT * FROM users WHERE data LIKE '%=12345%'

要么

SELECT * FROM users WHERE data LIKE '%proileId=12345%'

我可以提出为什么每一个都可以执行另一个的原因,但我很想知道逻辑。

2 个回复

在所有条件相同的情况下,较长的匹配字符串应该运行得更快,因为它允许使用更大的步骤跳过测试字符串并执行更少的匹配。

有关sting匹配背后算法的示例,请参阅维基百科上的Boyer Moore算法

当然不是所有事情都是平等的,所以我肯定会对它进行基准测试。

mysql参考文档中找到的快速检查以下段落:

如果您使用... LIKE'%string%'且字符串超过三个字符,MySQL使用Turbo Boyer-Moore算法初始化字符串的模式,然后使用此模式更快地执行搜索。

没有任何区别。 因为您在LIKE表达式的开头有一个%符号,所以完全排除了索引的使用,索引只能用于匹配字符串的前缀。

所以无论哪种方式都是全表扫描。

在一个相当大的数据库(即一个不适合你的32G服务器的RAM)上,IO是一个非常大的成本,所以我担心字符串模式匹配算法是不相关的。

1 VBO中的交错是否有助于或阻碍性能?

使用OpenGL VBO时,您可以交错数据 例如,您甚至可以将顶点数据与CPU使用的其他数据交错,而不是GPU。 交错是否有助于或阻碍主流分立和集成显卡的性能? ...

2 SQL查询-表达式> 0

我正在使用Microsoft SQL Server 2014,并且可以使用以下SQL查询: 这个特定的表达 返回很多0值,那么如何将整个表达式放入X> 0子句中,或者只要不显示带有该表达式= 0的行,就可以将其放在其他方式吗? 非常感谢。 ...

3 帮我执行sql查询

我有一张如下表。 我想计算前5%客户的金额和接下来的20%以及接下来的25%和接下来的25%,最后剩下的金额。 这只是DB表的示例。 ...

2011-05-18 11:52:58 1 70   sql
5 如何使用 HAVING 加速 SQL 查询

我有以下查询: 在拥有 1000 个用户和 1000000 个事务的数据库中,大约需要 7-8 秒。 有没有办法优化/加速这个 sql 查询? PS:我需要达到限制的用户数量和数量,这是我目前通过 PHP mysql_num_rows() 获得的。 更新:这是表格结构 ...

6 SQL查询类似“没有”的内容吗?

我正在尝试编写一个查询,该查询将返回缺少某些软件的主机: 如何查询缺少标题2的主机(应为B和C)? 我已经尝试使用COUNT进行GROUP BY,HAVING和子查询,但是我似乎没有正确的主意。 ...

2012-05-27 08:22:21 2 23025   sql
7 麻烦GROUP BY / HAVING? SQL查询未按预期执行

我有两个查询。 该查询给出正确的结果: 它返回符合条件的8条记录。 该查询给出不正确的结果: 我要执行的操作是返回16条记录:第一个查询的8条SFRSTCR_PIDM应该每个重复两次,并且每个记录应具有SSBSECT_SUBJ_CODE和SSBSECT_CRSE_NUMB ...

8 分组依据... SQL查询执行不正确

我想查看某个日期范围内的总销售产品数量,即 我在MS Access 2003中有以下sql查询: 但这没有执行。 MS Access给我这样的错误: “您试图执行不包含指定表达式'PurchaseDate BETWEEN#3/19/2013#和#3/22/2013#' ...

9 存储过程中的SQL Server LIKE查询速度

我正在做一个LIKE查询,以计算10+百万条记录的表中匹配记录的数量。 当我将查询作为独立查询运行时,它平均会在6秒内返回结果。 当我将查询设置为在存储过程中的多个记录上运行时,该过程所花的时间比单个查询长大约10倍。 单个查询: 在尝试批量处理时,我正在将处理列表读入临时表中 ...

10 使用LIKE%string%速度问题更新数据库查询

好了,所以我有两个桌子。 一个表具有超过200万行(描述),另一个表具有35,000行(名称)。 我正在尝试根据描述表中匹配的名称表名称将ID应用于描述表。 例如... 说明 名 因此,建立该表后,我正在使用此查询... 这将花费5分钟以上,服务器将消失。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM