我有一个包含一些日志信息的大数据库(200GB+)。我想加快SELECT查询和存储过程。我有一个带有GeneratedOnUtc 日期时间列的表,并且上面有一个非聚集索引。
我正在考虑将其更改为聚集索引。
的原因:
大量数据(约 4000 万行)
Column 用于多个Where子句 ( between, >, <)
列用于ROW_NUMBER() OVER (ORDER BY d.GeneratedOnUtc asc) AS Row查询
反对理由:
前段时间我使用了查询提示,但后来意识到大多数时候 SQL Server 比我更聪明。 构建额外的索引/重新组织数据或查询并获得比强制服务器使用计划要好得多的结果这通常效率低下,但对于某些数据子集来说速度足够快。但现在我处于一种我不知道如何更好地组织数据的情况。
我有两张桌子。第一个表 T1 是 (Id, CustomerId),第二个表 T2 具有相同的列。我想在 CustomerId 上加入 T1 到 T2。并获得前 N 行。在这种情况下,优化器看到我只需要 N 个 top 并说,“嘿,我将使用循环并很快找到 N 个匹配项,尤其是当我使用索引查找时。” 但它不起作用,因为没有满足条件的数据。因此它使用 aloop join来连接一个 25m 的表和一个非常慢的 100k 表。
当我强制 SQL Server 使用合并联接时,我得到以下计划,该计划在一秒钟内执行:
我不想强迫它有两个原因:
在这种情况下我该怎么办?