情景简要概述:
我的数据库使用GUID作为主键,对于我一直在阅读的内容,在GUID上使用聚簇索引似乎有些不好(增加碎片) ,减慢插入等)。我的项目使用hibernate,所以我们通常处理jpql并获取完整的实体(很多查询最终变成select p.* from person p [...]
)
我想知道创建覆盖表的所有列的非聚集索引是否是一种好方法(为了避免RID查找等)。
感谢您的帮助,已经!
答案 0 :(得分:2)
不,这不是一个好方法。听起来你已经读过在GUID上拥有聚簇索引是一个坏主意。相反,创建一个int(或bigint,如果需要)标识字段并将其作为聚簇索引,除非另一个字段更有意义。然后在GUID字段上创建一个非聚簇索引,让SQL为每个使用它的查询执行RID查找。这样就可以避免碎片和缓慢的插入/更新/删除。
答案 1 :(得分:0)
过早优化是一个坏主意。添加索引的插入,更新和删除是否增加了数据大小成本和工作量?除非您测量和测试性能以及索引的影响,否则您将无法知道。查看读取该表的查询,看看哪些(如果有的话)长得令人无法接受。然后调整该特定查询。