1

我知道这是非常基本的,并且考虑到我在数据库方面所处的位置,我现在可能应该理解这一点,但我并不完全理解索引的真正含义。

具体来说,以下是由 ORM 生成的 T-SQL - 它创建一个 FK,然后为其创建一个索引。

有索引有什么作用(在积极意义上),排除它有什么作用(在消极意义上)?

-- Creating foreign key on [item_id] in table 'CakeStats'
ALTER TABLE [dbo].[CakeStats]
ADD CONSTRAINT [FK_CakeStat_Item]
    FOREIGN KEY ([item_id])
    REFERENCES [dbo].[Items]
        ([id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating non-clustered index for FOREIGN KEY 'FK_CakeStat_Item'
CREATE INDEX [IX_FK_CakeStat_Item]
ON [dbo].[CakeStats]
    ([item_id]);
GO
4

1 回答 1

3

索引是一种平衡树,可以更快地搜索特定数据。一般意义上的索引是为了方便查找而标记它。可视化参考书背面的索引。它按字母顺序排序,以便快速找到实际信息的位置,代价是书后的额外页面使其更大/更厚。你索引的东西越多,它就越大。聚集索引和非聚集索引之间也存在差异。我上面给出的示例是一个非聚集索引,因此它是普通书籍内容的补充。聚集索引是按索引键排序的实际内容本身。

在外键情况下,如果您使用外键,则强制执行键的方式是检查引用的表/列以查看它是否存在。在外键上有一个索引大大加快了查找速度(log(n) 时间),而不是需要一次查看每一行(n 时间)。

在您的示例中,索引仅在查询基于 item_id 搜索 CakeStats 时才有帮助。实际上,Items(id) 也有一个索引非常重要,否则每次在 CakeStats 中插入/删除/更新 item_id 时,对外键的检查都会很昂贵。

于 2012-06-04T17:27:06.173 回答