如何解决T-SQL 在 SQL Server 中的查询性能
我在 SQL Server 中有两个临时查询,如下所示,
select *
from Product(nolock)
where id = '12345' and name = 'ABC';
select *
from Product(nolock)
where name = 'ABC' and id = '12345';
我们在 id 列上有聚集索引,在 name 列上没有索引。哪个查询会更快?为什么?
解决方法
性能将保持不变。
SQL Server 查询优化器足够聪明,可以看到条件相同 - 只是顺序不同。
WHERE
子句中条件的顺序不相关。
SQL Server 将首先通过 id
进行选择,然后在第二步依次通过 name
。
在这种情况下,这是无关紧要的:
I created a products table with primary key clustered on ID and replicated your test case
启用执行计划会给你答案:)
测试代码:
drop table if exists products
Create table products
(
id int primary key clustered,Value1 float
)
;with randowvalues
as(
select 1 id,CAST(RAND(CHECKSUM(NEWID()))*100 as varchar(100)) randomnumber
--select 1 id,RAND(CHECKSUM(NEWID()))*100 randomnumber
union all
select id + 1,CAST(RAND(CHECKSUM(NEWID()))*100 as varchar(100)) randomnumber
from randowvalues
where
id < 1000
)
insert into products
select *
from randowvalues
OPTION(MAXRECURSION 0)
select *
from products
where id = 9 and value1 = 75.6648
select *
from products
where value1 = 75.6648 and id = 9
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。