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;