【问题标题】:indexes in sql server, internal working and structure of indexessql server中的索引,索引的内部工作和结构
【发布时间】:2011-07-21 02:26:19
【问题描述】:

当我们在列上创建聚集索引 CIX_FirstNames 时,例如 FirstNames,那么 SQL Server 内部实际发生了什么?

我已经读到聚集索引会创建数据的副本。

那么,sql server 是否会创建一个新的索引表 IndexTable ,并将表中的所有 FirstNames 复制到 IndexTable 中,当搜索到 firstname 时,它​​会从索引表中显示它?

这是聚集索引的实际工作吗?

【问题讨论】:

  • 绝对需要学习这篇精彩的介绍文章SQL Server Index Basics - 它解释了索引结构并显示图表以将它们可视化。

标签: sql-server-2005 indexing internal clustered-index


【解决方案1】:

这是一个太大的话题,无法在此处快速回答 - 你需要自己了解:

Microsoft SQL Server 2008 Internals

详细介绍了这一切。

但只是简单地说:不!创建聚集索引不会重复数据!你从哪里得到的??

聚集索引所做的是对数据进行重新排序(根据键),聚集索引的叶级节点是数据页 - 但它们只存在一次。

更多感兴趣的资源:

【讨论】:

  • 那么是在创建非聚集索引时制作的数据副本吗?
  • @sqlchild:是的,聚集索引的叶级节点是数据页——不是数据页的副本——没有副本。
  • @sqlchild:非聚集索引将复制那些属于索引的列。如果您在 (FirstName) 上建立索引,那么是的 - 该 NC 索引的索引页将包含 FirstName 值作为副本。
  • @sqlchild:所有索引都有索引页——这就是它们的重点。 CI 和 NCI 索引之间的区别在于叶级 - 而普通 NCI 索引在那里只有另一组索引条目(指向实际数据),在 CI 中,叶级节点是 数据 - 没有“指向数据” - 它 IS 数据
  • @sqlchild:是的,当然 NCI 有叶级——每棵树都有。但是在 NCI 中,该叶级别也像所有其他级别一样包含“正常”索引条目。是的,NCI 确实包含整个数据页——它只是一个指向数据页所在的聚集索引的指针。看书!
【解决方案2】:

索引视图会重复数据。

“这样做的缺点是索引视图是 来自基础表的数据[...]"

http://strangenut.com/blogs/dacrowlah/archive/2008/11/26/creating-an-indexed-view-in-sql-server-2005-and-2008.aspx

【讨论】:

    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多