【发布时间】:2022-11-15 22:14:28
【问题描述】:
我想知道这两个查询之间最快(或最有效)的查询在 SQL Server 上给出相同的结果。
我使用了 SQL Server Profiler,但它为 2 个查询(0 秒)提供了相同的结果。
谢谢
查询 1
select a.*,b.*
from a
left join (query) b on a.id = b.id
where (clause(a))
order by a.date1
offset 0 rows fetch next 30 rows only
查询 2
with b as (query)
select a.*,b.*
from a
left join b on a.id = b.id
where (clause(a))
order by a.date1
offset 0 rows fetch next 30 rows only
以下是表和变量的定义(查询和子句(a)):
CREATE TABLE a (
id int NOT NULL PRIMARY KEY,
last_name varchar(255) NOT NULL,
first_name varchar(255),
age int
);
CREATE TABLE a2 (
id int NOT NULL PRIMARY KEY,
last_name varchar(255) NOT NULL,
adress varchar(255),
height int,
nationality_id int
);
CREATE TABLE nationality (
nationality_id int NOT NULL PRIMARY KEY,
name varchar(255) NOT NULL,
);
询问 :
a2 inner join nationality n on a2.nationality_id=n.nationality_id
where n.nationality_id=1
条款(a):
( age=30 )
有人能告诉我哪个是最好的查询(就性能而言),为什么?
【问题讨论】:
-
通用查询,并且没有查询计划和具有所有索引的表,您需要更多信息才能有人回答这个问题
-
将 suibquery 移动到 CTE 中可能不会对查询计划产生太大影响(或根本不会)。当您运行这些查询时,执行计划是什么样的?
标签: sql sql-server