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

Tsql 重写语句或避免使用特定索引的最佳方法,tsql,indexing,sql-server-2012,common-table-expression,Tsql,Indexing,Sql Server 2012,Common Table Expression,这个问题是一把双刃剑。在测试系统上,这个查询大约在7分钟后返回。在我的报告系统上,它具有相同的索引和附加的columnstore索引,以覆盖附加的问题报告,它根本不希望返回它所选择的使用columnstore索引 1) 我可以使用CTE或其他更光滑的工具来完成这个TSQL吗?如果不改变逻辑,我似乎无法提高性能 SELECT Count(BookingId) from Booking_tbl b1 WHERE email IN (Select Email From Booking_tbl b

这个问题是一把双刃剑。在测试系统上,这个查询大约在7分钟后返回。在我的报告系统上,它具有相同的索引和附加的columnstore索引,以覆盖附加的问题报告,它根本不希望返回它所选择的使用columnstore索引

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) 我可以使用特定索引停止发动机吗?我知道我可以将其设置为索引(0)以不使用索引或命名特定索引,但我可以说“对于此查询,不要使用此特定索引!”

被撕成这样放在SO或DBA SE上

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


谢谢

我想你是在统计预订日期间隔超过一天的电子邮件

请尝试以下查询:

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

为了更快,您应该在
bookedate
email
字段上创建索引。

我想您是在统计那些已预订日期间隔超过一天的电子邮件

请尝试以下查询:

SELECT COUNT(*) FROM
(
SELECT email FROM Booking_tbl
GROUP BY email
HAVING DateDiff(day, MIN(BookedDate) ,MAX(BookedDate)) > 1
) as T
为了更快,您应该在
bookedate
email
字段上创建索引