【问题标题】:Setting indexed columns on a custom SQL table在自定义 SQL 表上设置索引列
【发布时间】:2010-07-22 08:37:52
【问题描述】:

我已经阅读了有关主索引、唯一索引、聚集索引等的信息。但我需要通过一个示例来理解它。

下图是从 SQL Server Web 管理面板捕获的自动生成的 aspnet_Users 表。

Auto-generated ASP.NET Users Table http://eggshelf.com/capture.jpg

以此为模型;我将创建一个名为 Companies 的自定义表,假设字段为:ID、Name、ShortName、Address、City、Country.. ID、Name 和 ShortName 字段的值不能重复。

您为该表创建索引的方法是什么?哪个应该是集群的或非集群的?下面的索引对你来说合乎逻辑吗?

Index          Columns         Primary    Unique    Clustered    ign.Dup.Keys   Unique Key
------------------------------------------------------------------------------------------
PK_ID          ID              True       True      False        False          False
Comp_Index     Name,ShortName  False      True      True         False          False

问候..

【问题讨论】:

    标签: asp.net sql-server primary-key indexing clustered-index


    【解决方案1】:

    索引与表结构无关,而与访问模式有关。

    您需要了解如何查询表中的数据并相应地创建索引。

    经验法则是考虑为WHERE 子句中常​​用的字段定义索引。

    请参阅 this 关于该主题的博文。

    更新

    您只能在表上定义单个聚集索引。正如您在示例中所做的那样,这通常在表的标识字段上完成。

    其他索引将是非聚集的。

    关于另一个(非聚集)索引 - 如果您只打算在 WHERE 子句和 ORDER BY 子句中包含两个字段的查询将在 Name 上进行主要排序(而不是ShortName 上的主要排序)。这样做的原因是,这就是索引的存储方式 - 首先是 Name,然后是 ShortName

    但是,如果您将使用ShortName 作为主要排序或在WHERE 子句中不使用Name,则最好使用两个索引,每个索引一个。

    【讨论】:

    • 感谢您的回答。我知道这都是关于访问模式的。但是(在上面的示例中)我需要知道是否以及为什么需要对 ID、Name 和/或 ShortName 使用聚集或非聚集索引。
    【解决方案2】:

    阅读Brad's Sure Guide to Indexes,快速全面了解 SQL Server 索引

    通常,没有执行任何查询分析,您的出发点是:

    • 主键列可以成为聚集索引的良好候选者(通常取决于使用的数据类型和键宽度)。
    • 您应该在外键列上创建非聚集索引。
    • 您应该在查询的 SARG 列上创建非聚集索引。

    那就看看这些generic index tips吧。

    【讨论】:

      【解决方案3】:

      Oded 是正确的 - 索引(集群和非)都是关于性能的,需要对查询类型有深入的了解。

      例如如果 ShortName 和 Name 都被独立查询,您可能希望为 ShortName 和 Name 设置单独的非聚集索引。 如果您需要强制唯一性,请使用 UNIQUE INDEX(或将 UNIQUE CONSTRAINTs 添加到 ShortName 和 Name)。 ID 已经是唯一的,因为它是 PK。

      如果您更了解如何从公司表中获取数据(例如,如果通常一次获取城市中的所有公司,则可以更改聚集索引(从其默认 ID)等)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 2022-10-01
        相关资源
        最近更新 更多