SQL SERVER中的子字符串vs LEFT
我发了一个问题,但没有人回答,所以我试着集中精力,是什么让我的提问变慢了,一个问题出现在我的脑海里哪一个更快更高效?左边还是子字符串?SQL Server是一个数据库。您不会问哪个字符串处理函数“更快”的问题。你会问“哪一个可以使用索引?”和“我有所需的索引吗?”。都是关于数据访问的,因为磁盘是慢的,而不是关于CPU寄存器的移位 那么,哪个可以使用索引?(哪个是?)。理论上,SQL SERVER中的子字符串vs LEFT,sql,sql-server,sql-server-2008,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,我发了一个问题,但没有人回答,所以我试着集中精力,是什么让我的提问变慢了,一个问题出现在我的脑海里哪一个更快更高效?左边还是子字符串?SQL Server是一个数据库。您不会问哪个字符串处理函数“更快”的问题。你会问“哪一个可以使用索引?”和“我有所需的索引吗?”。都是关于数据访问的,因为磁盘是慢的,而不是关于CPU寄存器的移位 那么,哪个可以使用索引?(哪个是?)。理论上,LEFT可以使用索引,但实际上通常不会子字符串不能。不要使用子字符串 设计数据模型以利用可搜索表达式,并相应地编制索引。这
LEFT
可以使用索引,但实际上通常不会<代码>子字符串不能。不要使用子字符串
设计数据模型以利用可搜索表达式,并相应地编制索引。这就是全部,没有神奇的子弹。避免扫描 当您在谓词上使用函数时,您的引擎将被迫在搜索操作上使用扫描操作。从理论上讲,左派倾向于巧妙地使用索引。但是,在执行Left()函数之前,引擎仍然不知道它的输出。因此,Substring()也是如此 如果确实想优化查询的性能,可以将Left()表达式替换为LIKE表达式。请确保结尾处有%通配符。此表达式将使用索引查找(如果列上有适当的索引) 例如 左(MyColumn,2)='AB'>MyColumn-LIKE'AB%' 实际上,LIKE运算符(末尾带有%通配符)最终由引擎转换为逻辑查找谓词。因此,引擎将重写上述类似表达式,如下所示: 类似于“AB%”的菌柱>菌柱>='AB'和菌柱<'AC'
对于Substring(),您没有更好的替代方法,您必须考虑其他替代方法,如全文。左
和子字符串之间没有任何区别,因为左在执行计划中被转换为子字符串
例如:
选择子字符串(列,1,2),
左(第3列)
从你的桌子上
在执行计划中会像这样
像这样的表格
Id_num Fname Minit Lname ids
1 Karin F Josephs 3
2 Pirkko O Koskitalo 56
3 Karin F Josephs 16
4 Pirkko O Koskitalo 96
1 Karin F Josephs 3
2 Pirkko O Koskitalo 56
子字符串:
Using Substring give the initial position values and End position values.
例如:
左:
例如:
如果有人感兴趣,它会在子字符串(比如CHARINDEX)和左/右之间测试性能
根据结果,在非索引列上,左/右始终比子字符串快。我真的不认为会有任何性能差异。@Remus的答案表明,两者之间的差异可以忽略不计。如前所述,避免使用任何一个。左字符串和子字符串(从1到n)都应该能够使用类似于“xxxx%”的索引访问。当然,只有当它是一种按排序顺序携带实际数据的索引时。优化器必须足够聪明才能使用它:-)@dnoeth:我同意,如果您想搜索全文或未定义的部分,请使用全文搜索。如果您总是希望搜索第一个n(其中n是已知且恒定的),请创建一个单独的列,可能是计算列。为单独的列编制索引,不要使用FTS、LEFT或SUBSTRING。谢谢。通过研究我庞大的数据库,我发现两者几乎相同。你说得很对。
select SUBSTRING(Fname,2,5) from new_employees
(No column name)
arin
irkko
arin
irkko
arin
irkko
using Substring give only how many char you want from LEFT Side.
select left(Fname,2) from new_employees
(No column name)
Ka
Pi
Ka
Pi
Ka
Pi