为什么sybase索引大小比数据本身大得多

时间:2015-09-17 14:26:14

标签: database indexing sybase

有一个sybase表,结构为

{ col1 int, col2 int, msgdate datetime, msg image, primary_key (col1)}

我们在col2上创建了一个索引。此表中有近400万行。我使用了命令" sp_spaceused"检查表的大小,发现数据本身大约是4GB,而index_size几乎是40 GB(大10倍)。

索引如何消耗这么多空间?假设索引是在类型为" int"?的列上创建的我想知道它是否是专栏" msg"类型"图像"导致问题,或命令" sp_spaceused"没有正确报告空间使用情况。

任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

之前我见过类似的案例,原因总是碎片化。 它发生在已经遭受数百万次插入和删除的数据行表中。所有页面表(也称为APL)似乎表现得更好:在我们的数据库中,所有页面表都超过了数据行,但只有数据行有这个问题。

由于这个原因,我不建议使用APL而不是数据行。

解决方案是通过运行

来重组表
reorg rebuild <TABLE>

这是一个缓慢,昂贵且阻塞的命令,因为它在物理上重新排列数据和索引结构。其他人在运行时无法访问该表,并且需要dboption“select into / bulkcopy / pllsort”。总之,在周末运行的任务类型。好的方面,它是非常安全的:如果它失败了,表格将被部分重组但仍然可用。

由于像你这样的表在重组之后会再次降级,我建议计划每周安排的工作来重组最需要的表。