我以前认为,当我更新表中的索引列时,同时索引也被更新。但在我的一次采访中,采访者强调,这种方式并不奏效。对于基表中的任何更新,索引将重建/重新组织。虽然我很确定这不会发生,因为这两个操作都非常昂贵,但仍然想要与专家的观点保持一致。当索引键在表中更新时,索引更新如何工作?
在想到这件事时,还有一件事出现在我的脑海里。假设我有索引列值1-1000。因此,按照B-Tree结构,假设值为999,将自上而下地排列在最右侧的节点上。现在,如果将此列从999更新为2,则需要进行大量混洗才能在索引B-Tree中调整此值。在基表更新后,如果索引重建/重新组织不会发生,将如何处理。
B树不完整或平衡,它只是将其移动到正确的位置,如果它不适合,索引页将被拆分为2. –
但在我的示例中,我说更新999 2,根据树中节点的级别,可能需要很多转换。那么它只会做这些转变还是会重建或重组? –
它只会移动那一条记录,其他记录将保留 - 这就是为什么你需要重建/重组,因为索引将会碎片化 –