【问题标题】:Do SQL Server included columns takes double space?SQL Server 包含的列是否占用双倍空间?
【发布时间】:2014-10-08 15:26:00
【问题描述】:

我的问题是例如我有以下几列

Cl1 int - primary key
Cl2 int
Cl3 nvarchar(200)
Cl4 nvarchar(max)

现在假设我在Cl2 上创建一个非聚集索引,但是当我查询Cl2 时,我总是同时检索Cl3Cl4

在索引中包含Cl3 是合乎逻辑的,因为它会使检索操作更快,但是Cl4nvarchar(max) 并且可能非常大:此列包含已爬取的页面源

所以我的问题是:将Cl4 包含在非聚集索引中是否合乎逻辑

包括它会使Cl4 在硬盘驱动器上准确存储2 次?

非常感谢您的回答

SQL Server 2014

【问题讨论】:

  • 是的,如果您将CL4 包含到您的非聚集索引中,那么CL4 的值将存储在基本数据页面以及在非聚集索引的索引页面中。这是空间(您需要更多)和速度(如果您包含CL4,您应该会获得更好的速度)之间的经典权衡 - 选择其中一个 - 您不能同时拥有两者

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


【解决方案1】:

我将向您推荐this answer,它解释了有关索引中包含的列的更多信息。

简而言之,是的,如果将列包含在索引中,使用的空间会更大,但性能会更好。选择权在你。

【讨论】:

  • 检索性能会更好。插入/更新/删除性能可能会降低。
【解决方案2】:

正如您所推测的,包括 C14 可能会对选择的性能产生积极影响,但会以磁盘空间为代价。我想你也明白,受此影响的不仅仅是磁盘空间,还有插入、更新和删除。更改是否值得将取决于您的系统。我鼓励你做一些真正的性能分析......这两种选择。然后根据结果做出决定。

【讨论】:

    【解决方案3】:

    来自 SQL Server 2014 联机丛书:

    Up to 16 columns can be combined into a single composite index key. All the columns in a composite index key must be in the same table or view. The maximum allowable size of the combined index values is 900 bytes.
    
    Columns that are of the large object (LOB) data types ntext, text, varchar(max), nvarchar(max), varbinary(max), xml, or image cannot be specified as key columns for an index.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多