Val*_*yev 6 database sql-server indexing b-tree
如果我有一个包含数据的表列并在此列上创建索引,索引是否会占用与列本身相同的磁盘空间量?
我很感兴趣,因为我试图理解b-tree是否真的保留了叶子节点中列数据的副本,或者它们以某种方式指向它?
对不起,如果这是"Java会取代XML吗?" 善意的问题.
更新:
使用单个GUID列创建了一个没有索引的表,添加了1M行--26MB
与主键相同的表(聚簇索引) - 25MB(甚至更少!),索引大小 - 176KB
具有唯一键的相同表(非聚集索引) - 26MB,索引大小 - 27MB
因此,只有非聚簇索引占用的空间与数据本身一样多.
所有测量都在SQL Server 2005中完成
B-Tree 指向表中的行,但 B-Tree 本身仍然占用一些磁盘空间。
有些数据库有专门的表,其中嵌入了主索引和数据。在Oracle中,它被称为IOT——索引组织表。
常规表中的每一行都可以通过内部 ID(但它是特定于数据库的)来标识,B 树使用该内部 ID 来标识行。在 Oracle 中,它的名称rowid和外观如下AAAAECAABAAAAgiAAA:)
如果我有一个包含数据的表列并在此列上创建索引,那么该索引是否会占用与该列本身相同的磁盘空间量?
在基本 B 树中,节点数与列中的项目数相同。
考虑1,2,3,4:
    1 
  / 
2
   \ 3 
      \ 4
确切的空间仍然可能有点不同(索引可能更大一点,因为它需要存储节点之间的链接,它可能不完美平衡等),我猜数据库可以使用优化来压缩部分索引。但索引和列数据的数量级应该是相同的。