我刚刚发现了以下两个选择语句之间的执行计划表现是很不同的:令人惊讶的SQL的速度增加
select * from your_large_table
where LEFT(some_string_field, 4) = '2505'
select * from your_large_table
where some_string_field like '2505%'
执行计划分别为98%和2%。然后,速度上的差异。当我看到它时,我感到震惊。
我总是做LEFT(xxx)='yyy',因为它读得很好。 我实际上通过检查LINQ生成的SQL与我手工制作的SQL来发现这一点。我认为LIKE命令会比较慢,但事实上要快得多。
我的问题是为什么LEFT()比LIKE'%..'慢。他们完全相同?
此外,是否有使用LEFT()命中CPU?
这不完全正确。该指数仍然可以使用,但可能以不同的方式。如果谓词上的预期匹配数量很小,并且索引在物理上比tabe小得多,则可以利用索引全或全速扫描。 – 2008-12-19 17:07:02
有趣的是,谢谢你的信息 – hamishmcn 2008-12-22 18:57:08