【问题标题】:Creating an index with a where clause - SQL SVR 2005使用 where 子句创建索引 - SQL SVR 2005
【发布时间】:2011-02-01 04:43:20
【问题描述】:

我最近发现了在 SQL Server 2005 的索引中使用 WHERE 子句的能力。我想优化一些查询,并希望得到一些反馈。

感兴趣的表包含 2 个浮点列,[long] 和 [short]。这些列在 20-40% 的行中可能为 0。有几个存储过程使用以下子句之一查询此表:

  • WHERE(长 0 或短 0)
  • 在哪里(长 0 和短 0)

我正在考虑在条件 WHERE 0 的情况下将索引放在 long 和 short(或两者上都有一个索引),希望存储的 procs 能够使用索引扫描而不是表扫描来获取这些数据.

鉴于以上信息,您将如何创建索引?或者,如果索引不是最佳解决方案,那么合理的替代方案是什么?提前致谢。

【问题讨论】:

  • 返回所有行的 60-80% 的查询可能不会从使用索引中受益。

标签: sql sql-server sql-server-2005 indexing


【解决方案1】:

在索引创建中使用 Where 子句是 SQL Server 2008 的一项功能 - 过滤索引不在 SQL Server 2005 中。

过滤索引遵循与普通 NC、非覆盖索引相同的提示规则,因此 60-80% 的行为 0,索引可能会提示为表/聚集索引扫描。

避免这种倾斜的唯一方法是使索引覆盖,但我们看不到其余的子句/选择来知道这是否是一个合理的选择。

【讨论】:

  • 感谢您对 2005 和 2008 年的提醒。一定要喜欢生活在过去...至于掩护,这不是一个真正的选择,但绝对值得关注。跨度>
猜你喜欢
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 2021-02-07
  • 2021-11-17
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多