非数字索引的性能

Col*_*ond 4 sql-server indexing clustered-index

如果我在SQL Server数据库上使用nvarchar(n)列作为聚簇索引,那么与数字(int)索引相比,我是否会遭受重大的性能损失?另外复合指数的表现如何比较?

Joh*_*ter 8

Sql并不关心你的索引是否是数字,但是你需要考虑一些事情,这取决于列中的内容以及你如何使用表.

通常,您希望保持索引尽可能小,因此nvarchar(4000)(最多8000字节)确实很糟糕,但varchar(3)(最多3个字节)将小于int(4个字节).您还希望(在可能的情况下)将索引插入插入到索引的末尾,这样可以防止索引碎片化并导致性能问题.

如果针对表运行的查询仅包含索引中的列,则复合索引可以极大地提高性能.这意味着当索引满足查询时,甚至不会触及实际表.

有关索引的概述,请参阅Sql server索引基础知识.

如果您提供有关表本身以及您希望如何使用它的更多具体细节,可能会更有帮助?