Paul White explains why there is a big performance hit when using IGNORE_DUP_KEY
on clustered indexes:
The
IGNORE_DUP_KEY
index option can be specified for both clustered and nonclustered unique indexes. Using it on a clustered index can result in much poorer performance than for a nonclustered unique index.The size of the performance difference depends on how many uniqueness violations are encountered during the
INSERT
operation. The more violations, the worse the clustered unique index performs by comparison. If there are no violations at all, the clustered index insert may even perform better.
I use IGNORE_DUP_KEY
primarily in cases like queue tables where I might be queuing up changes to migrate to a warehouse and where the chance of collision is low but non-zero. It looks like pushing much beyond that pattern can be devastating for performance.