[英]Query performance of T-SQL in SQL Server
我在 SQL 服务器中有两个临时查询,如下所示,
select *
from Product(nolock)
where id = '12345' and name = 'ABC';
select *
from Product(nolock)
where name = 'ABC' and id = '12345';
我们在 id 列上有聚集索引,在 name 列上没有索引。 哪个查询会更快? 为什么?
性能将是相同的。
SQL 服务器查询优化器足够聪明,可以看到条件相同——只是顺序不同。
WHERE
子句中的条件排序不相关。
SQL 服务器将 select 首先按id
,然后在第二步按name
顺序。
在这种情况下,它是无关紧要的:
我创建了一个产品表,其主键聚集在 ID 上,并复制了您的测试用例
启用执行计划会给你答案:)
测试代码:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.