sql-server – Substring与右左组合的SQLServer中的相对性能

前端之家收集整理的这篇文章主要介绍了sql-server – Substring与右左组合的SQLServer中的相对性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是一个基于性能的问题,而不是“ I don’t understand”或“ best practice”问题.

我在sqlServer数据库中有一个varchar字段,该字段保证长于7个字符.
我需要提取一个由varchar中的第2,第3,第4和第5个字符组成的char(4)字段.

例如,如果varchar的值为1234567890,我将寻找2345部分.

在右上角的组合中使用子字符串有性能优势吗?

SELECT SUBSTRING(account,2,4) FROM payment

要么

SELECT RIGHT(LEFT(account,5),4) FROM payment

我已经注意到使用右边的左边有一个1,760,335条记录,但我不知道这是否是由于缓存查询等原因.

UPDATE
我做了更多的功课似乎在这种情况下,右左最终被执行为右子字串.这是规则吗还是只是sqlServer决定皮肤这个特定的猫的方式?

解决方法

1为一个有趣的问题.您评估sql Server可能通过优化显着地更改每个语句可能是准确的;与您的评估相同,在这样大的集合中,sql Server可能能够比一个查询更好地缓存一个查询.

另外还有两件事情可能是(模糊的)相关的:

>内存消耗;如果LEFT / RIGHT组合消耗更多的内存,我会很好奇.在理论上,第一个函数的返回值将需要被存储,以便它可以被传递到第二个函数中,尽管同一个寄存器可能被反复使用.
>边界检查. varchar基本上是一个指向char []的开头的指针,其中有两个额外的字节用于指示长度.这表明,通过查看这2个字节中包含的值以确保它不超出范围,通过索引访问值时,需要执行某种边界检查.

在使用char和varchars的字符串限制之外,sql Server也非常宽恕.以下代码将运行没有任何错误.

DECLARE @Test varchar(50);
SET @Test = 'Hello World';
SELECT substring(@Test,4);
SELECT substring(@Test,2000,5000);

所以将:

SELECT right(left(@test,500),400);

我的猜测是,对你的问题的答案的解释在于有关的东西;不幸的是,我不知道你的问题的答案.

如果您使用较长的字符串或char与varchar得到相同的性能结果,我会很好奇.这些测试可以为sql Server的内部结构提供更多的见解.

原文链接:https://www.f2er.com/mssql/75903.html

猜你在找的MsSQL相关文章