Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 嵌套select和DISTINCT/ORDER的性能_Sql_Sql Server - Fatal编程技术网

Sql 嵌套select和DISTINCT/ORDER的性能

Sql 嵌套select和DISTINCT/ORDER的性能,sql,sql-server,Sql,Sql Server,我最初的问题是: SELECT DISTINCT Member.Id, Member.Email, Booking.ItemId FROM Member WITH(NOLOCK) JOIN Booking WITH(NOLOCK) ON Member.Id = Booking.CustomerId WHERE DATEDIFF(d, Booking.BookingDate, GETUTCDATE()) > 1 我尝试按Booking.BookingDate排序结果,并在返回的结果中添加了

我最初的问题是:

SELECT DISTINCT
Member.Id,
Member.Email,
Booking.ItemId
FROM Member WITH(NOLOCK)
JOIN Booking WITH(NOLOCK) ON Member.Id = Booking.CustomerId
WHERE DATEDIFF(d, Booking.BookingDate, GETUTCDATE()) > 1
我尝试按Booking.BookingDate排序结果,并在返回的结果中添加了Booking.BookingDate相关信息作为新列:

因此,新查询将如下所示:

SELECT *
FROM
(
SELECT DISTINCT
Member.Id,
Member.Email,
Booking.ItemId,
Booking.BookingDate
FROM Member WITH(NOLOCK)
JOIN Booking WITH(NOLOCK) ON Member.Id = Booking.CustomerId
WHERE DATEDIFF(d, Booking.BookingDate, GETUTCDATE()) > 2   
) a
Order by BookingDate 
我使用SSMS的执行计划来比较这两个查询,它们看起来是一样的。 有什么方法可以确保我的重写不会降低性能吗?

您不需要子查询(尽管这不会影响性能)。因此:

我真的怀疑您是否需要
选择DISTINCT
,因为似乎不太可能重复。请注意,表别名使查询更易于编写和读取

SELECT DISTINCT m.Id, m.Email, b.ItemId, b.BookingDate
FROM Member m JOIN
     Booking b
     ON m.Id = b.CustomerId
WHERE b.BookingDate > DATEADD(day, 1, GETUTCDATE())
ORDER BY BookingDate;