【问题标题】:Best way to rewrite statement or avoid using a specific index重写语句或避免使用特定索引的最佳方法
【发布时间】:2023-03-07 23:18:01
【问题描述】:

这个问题是双刃剑。在测试系统上,此查询会在大约 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 上被撕裂了

基本上我需要统计重复预订的数量才能得到一个百分比。

谢谢

【问题讨论】:

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


    【解决方案1】:

    我猜您正在尝试计算 BookedDate 相隔一天以上的电子邮件。

    试试这个查询:

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

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

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      相关资源
      最近更新 更多