重写语句或避免使用特定索引的最佳方法

时间:2013-12-05 13:08:45

标签: tsql indexing sql-server-2012 common-table-expression

此问题是双刃。在测试系统上,此查询返回约7分钟。在我的报告系统上,它具有相同的索引和附加列存储索引以覆盖其他问题报告,它根本不想返回选择使用列存储索引。

1)我可以使用CTE或其他东西来完成这个TSQL吗?如果不改变逻辑,我似乎无法提高性能。

SELECT Count(BookingId)   
from Booking_tbl b1
WHERE email IN (Select Email From Booking_tbl b2 WHERE DateDiff(day, b2.BookedDate ,       b1.BookedDate) > 1)

2)我可以使用特定索引停止引擎吗?我知道我可以将它设置为INDEX(0)以不使用索引或命名特定索引,但我可以说'对于此查询,不要使用此特定索引!'

被撕裂以将其放在SO或DBA SE上

基本上我需要计算重复预订的数量以获得百分比。

感谢

1 个答案:

答案 0 :(得分:1)

我猜你在试图计算BookedDate超过一天的电子邮件。

尝试此查询:

SELECT COUNT(*) FROM
(
SELECT email FROM Booking_tbl
GROUP BY email
HAVING DateDiff(day, MIN(BookedDate) ,MAX(BookedDate)) > 1
) as T

为了加快速度,您应该在BookedDateemail字段上创建索引。