【问题标题】:Which index option should I choose?我应该选择哪个指数选项?
【发布时间】:2011-10-04 16:27:26
【问题描述】:

我有一个包含这些列(id、A、B、C、D、E)的 SQL 表。

我通常查询(A 和 C)和(B 和 C),所以我决定对这 3 个进行索引。对此有一些选择:

  • A、B、C 分别索引
  • 两对 (A,C) 和 (B,C) 的索引
  • (A、B、C)的索引

我应该选择哪个选项?数据库大小可能是个问题,但现在假设这不是什么大问题。

【问题讨论】:

  • 你用的是什么数据库?
  • 您得到的几乎所有答案都是有根据的猜测。你最好进行实验和测量。
  • @Conrad Frix。一些实验总是好的,但有一些规则要遵循。这并不是一个罕见的案例。最好的建议是为您的特定数据库搜索此问题的答案,因为这可能会有所不同。
  • @GolezTrol 来自 OP 的声明“我通常查询”我认为可以安全地假设正在构建索引以提高 现有 查询的性能。 OP 已经知道候选索引是什么。此时剩下的就是添加索引和测试。 DB 引擎有一个讨厌的习惯,即在您认为应该使用索引时却不使用它。
  • 如果你知道索引是如何工作的,你就会知道有些候选是没有意义的。我认为这是一个很好的问题,通过回答,我为 OP 省去了创建和测试 4 个无用索引的负担。

标签: sql indexing database-design


【解决方案1】:

在这两对上建立索引。对于大多数索引(尽管这可能因类型和数据库而异),如果仅查询 A,则也使用 A,B 上的索引,但如果仅查询 B,则不使用 A,B。因此,请确保您的索引是您查询的列。如果您查询 A,B 和 A,C,而不是单独查询 B 或 C,则只需要这两对上的索引。

【讨论】:

    【解决方案2】:

    如果存储/空间利用率很重要,则添加两个单列索引,分别位于 A 和 B。

    如果这些查询的性能更为关键,则添加两个复合索引,一个在 (A,C) 上,另一个在 (B,C) 上。

    正如有人已经评论过的,这些建议是有根据的猜测。尝试各种选项以找到最佳索引策略是个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2018-10-06
      相关资源
      最近更新 更多