【问题标题】:Using non clustered index for efficient searching使用非聚集索引进行高效搜索
【发布时间】:2015-12-07 15:04:45
【问题描述】:

我在三列的组合上创建了非聚集索引。是否需要在 where 条件中指定所有三列才能使用非聚集索引。

【问题讨论】:

  • 我不这么认为。但为了使用该索引,第一列必须在 WHERE 子句中。

标签: sql-server indexing sqlperformance non-clustered-index


【解决方案1】:

简短的回答是否定的。

如果至少索引中的第一列出现在您的where 子句中,则可以使用索引。 它是否被使用已经取决于优化器,但假设您在where 子句中的其他列上没有任何其他索引,它可能会被使用。

【讨论】:

    【解决方案2】:

    为了利用您的索引,您必须像这样使用。

    索引:Ix_threecols(c1,c2,c3)

    1. select c1,c2,c3 from table where c1=val
    and c2=val and c3=val
    2. select c1,c2,c3 from table where c1=val
    and c2=val
    3. select c1,c2,c3 from table where c1=val
    

    索引中最左边的第一列应该用在 where 子句中。 请不要在您的选择中使用 (*),因为它可能会导致索引扫描。

    我们必须检查执行计划才能对此进行更多分析。

    【讨论】:

    • 如果我使用 where c1=val 或 c2 =val 会怎样
    • 你可以像这样使用,但如果你使用'or'会是一个索引扫描
    猜你喜欢
    • 2014-07-28
    • 2020-08-04
    • 2015-07-31
    • 2013-08-07
    • 2019-09-12
    • 1970-01-01
    • 2023-03-23
    • 2021-01-14
    相关资源
    最近更新 更多