我在生产中有一个数据库应用程序,所有表都使用GUID主键,这些键当前已设置为聚簇索引。我了解到,出于性能考虑,这是一个较差的设计。我已经阅读了很多有关该主题的文章,包括Kimberly Tripp撰写的这篇精彩文章。
是否可以通过简单地创建类型的自动递增索引列INT
并将其设置为聚集索引来提高性能?我从Kimberly的文章中了解到,所有非聚集索引(例如,如果执行此操作,则将向前移动GUID主键)都将引用聚集索引。但是,如果我在WHERE
子句中使用GUID主键搜索记录,这实际上会提高性能吗?
另外,为了获得性能提升,我是否必须按照创建记录时的自然顺序填充现有记录的新列?
编辑:解决这个问题是否是另一个问题的重复:另一个问题是询问有关使用GUID主键的性能方面的一般最佳实践。没有讨论具体的方法。另一方面,我的问题是具体询问添加类型的自动递增索引列INT
是否将有助于改善GUID主键的问题。此外,我的问题然后询问我是否必须按其“自然顺序”填充新列以实现收益,由于其较高的通用性,因此在另一个问题中也未解决。
有几件事情要考虑:
是的,您是正确的,聚集索引键将出现在所有非聚集索引中。拥有较小的密钥将有助于节省磁盘和缓冲池中的空间。
具有标识的聚集键将为您提供表插入的结尾,并有可能(取决于负载)使该插入热点成为可能。现在的GUIDS是随机插入的,不会产生太多的热点,但是会导致更多的页面拆分,这也可能会对性能产生不利影响。
要回答提高性能的问题,您当前的问题领域是什么?有什么可以处理的数据吗?如果您现在没有任何问题,则可能不值得进行更改。
当您将列添加为标识时,它应该为自己设定种子,顺序实际上并不重要。
如果确实使用INT列作为键,请在GUID列上创建唯一的非聚集索引,以使优化器知道只有一个值(优化)并允许快速查找。如果价格不太贵,则覆盖它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句