【问题标题】:Unique vs NonUnique Clustered Index to speed searches on a NonUnique field唯一与非唯一聚集索引可加快对非唯一字段的搜索
【发布时间】:2014-01-23 11:30:55
【问题描述】:

我有一百万行数据集,我经常将其加入 A 列。

为了加快加入速度,我将在 A 列上创建一个聚集索引。

A 列不是唯一的,但(A 列,B 列)是唯一的配对。

我永远不会在 where 子句或连接中使用 B 列。

是只在 A 列上创建非唯一聚集索引还是在(A 列、B 列)上创建唯一聚集索引更好?

【问题讨论】:

  • 那张表上还有其他索引吗?有PK吗?

标签: sql sql-server tsql indexing


【解决方案1】:

您将在 A,B 上创建唯一索引以强制值的唯一性。这是在数据库级别强制执行的,因此您将无法向数据库中插入重复值。

唯一索引可用于解析需要索引中第一列但不一定全部的查询。因此,唯一索引适用于 A 上的查询。

我会说创建唯一索引。有两件事要记住。第一个是如果B 是一个大数据类型——比如char(500)。这些值存储在索引中,因此包含B 可能会使索引变得相当大。

其次,如果数据不是按A, B 顺序插入的,那么将其设为聚集索引可能会导致插入和删除的性能开销。新插入最终会出现在随机页面上,该页面可能会被填充,然后需要拆分(或者您可以使用页面的填充因子为插入保留额外空间,但代价是最初会使表格更大)。

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2019-10-28
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多