聚簇索引与非聚簇索引(包括所有列)(SQL Server)

时间:2014-07-03 19:06:49

标签: sql sql-server database-administration clustered-index non-clustered-index

情景简要概述:

我的数据库使用GUID作为主键,对于我一直在阅读的内容,在GUID上使用聚簇索引似乎有些不好(增加碎片) ,减慢插入等)。我的项目使用hibernate,所以我们通常处理jpql并获取完整的实体(很多查询最终变成select p.* from person p [...]

我想知道创建覆盖表的所有列的非聚集索引是否是一种好方法(为了避免RID查找等)。

感谢您的帮助,已经!

2 个答案:

答案 0 :(得分:2)

不,这不是一个好方法。听起来你已经读过在GUID上拥有聚簇索引是一个坏主意。相反,创建一个int(或bigint,如果需要)标识字段并将其作为聚簇索引,除非另一个字段更有意义。然后在GUID字段上创建一个非聚簇索引,让SQL为每个使用它的查询执行RID查找。这样就可以避免碎片和缓慢的插入/更新/删除。

答案 1 :(得分:0)

过早优化是一个坏主意。添加索引的插入,更新和删除是否增加了数据大小成本和工作量?除非您测量和测试性能以及索引的影响,否则您将无法知道。查看读取该表的查询,看看哪些(如果有的话)长得令人无法接受。然后调整该特定查询。