Dhw*_*ani 13 sql sql-server sql-server-2008 sql-server-2008-r2
我在这里发了一个问题,但是没有人回答,所以我试着把注意力集中在让我的查询变得缓慢的问题上.哪一个更快更有效?左或后点?
Mik*_*son 17
没有差异可言之间left和substring因为left被转换为substring执行计划.
例如:
select substring(col, 1, 2),
left(col, 3)
from YourTable
Run Code Online (Sandbox Code Playgroud)
在执行计划中看起来像这样
<DefinedValue>
<ColumnReference Column="Expr1004" />
<ScalarOperator ScalarString="substring([col],(1),(2))">
<Intrinsic FunctionName="substring">
<ScalarOperator>
<Identifier>
<ColumnReference Column="col" />
</Identifier>
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="(1)" />
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="(2)" />
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
</DefinedValue>
<DefinedValue>
<ColumnReference Column="Expr1005" />
<ScalarOperator ScalarString="substring([col],(1),(3))">
<Intrinsic FunctionName="substring">
<ScalarOperator>
<Identifier>
<ColumnReference Column="col" />
</Identifier>
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="(1)" />
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="(3)" />
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
</DefinedValue>
Run Code Online (Sandbox Code Playgroud)
Rem*_*anu 16
SQL Server是一个数据库.你不问问哪个字符串处理功能"更快".你问问题'哪些可以使用索引?' 并且'我有所需的索引吗?'.所有关于数据访问,因为磁盘是sloooooow,而不是关于转移CPU寄存器.
那么,哪个可以使用索引?(哪一个是可以接受的?).理论上LEFT可以使用索引,但实际上它通常不会.SUBSTRING不能.而不是SUBSTRING使用全文.
设计您的数据模型以利用sargable表达式,相应地编制索引.这就是它的全部,没有灵丹妙药.避免扫描.
| 归档时间: |
|
| 查看次数: |
47123 次 |
| 最近记录: |