我对 SQL (Server2008)的低级知识有限,现在正受到我们 DBA 的挑战。让我来解释一下(我已经提到了明显的陈述,希望我是对的,但如果你看到了什么错误,请告诉我)这个场景:
我们有一张桌子,上面放着“法院命令”。当我创建这个表时(名称: CourtOrder) ,我创建它的方式是:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
然后,我对主键应用了一个非聚集索引(为了提高效率)。我的理由是,它是一个唯一的字段(主键) ,应该进行索引,主要是为了选择目的,因为我们经常使用 Select from table where primary key = ...
然后,我对 PersonId 应用了一个丛集索引。原因是对特定的人物理订单进行分组,因为绝大多数工作是为一个人接受订单。那么,select from mytable where personId = ...
I have been pulled up on this now. I have been told that we should put the clustered index on the primary key, and the normal index on the personId. That seems very strange to me. First off, why would you put a clustered index on a unique column? what is it clustering? Surely that's a waste of the clustered index? I'd have believed a normal index would be used on a unique column. Also, clustering the index would mean we can't cluster a different column (One per table, right?).
我被告知我犯了一个错误的原因是他们认为在 PersonId 上放置一个聚集索引会使插入变慢。对于选择的速度增加5% ,插入和更新的速度将降低95% 。是这样吗?
他们说,因为我们集群了 PersonId,所以当我们插入或更改 PersonId 时,SQLServer 必须重新排列数据。
所以我问,如果 SQL 这么慢,为什么还要有 CLUSTERED INDEX 的概念呢?有他们说的那么慢吗?我应该如何设置索引以获得最佳性能?我本以为 SELECT 比 INSERT 用得更多... 但是他们说我们在 INSERTS 上有锁定问题..。
希望有人能帮我。