我在SQL Server 2012上有一个数据库,并且我遇到一些问题,一些表在一段时间后变得很慢,而且有助于重建索引。我想知道是否有人对其中任何一个可能出错的人提出建议,我将在下面发布他们的结构和索引。我自己没有构建这个结构,但可以完全修改。
表1
索引:
表2
索引:
表3
索引:
答案 0 :(得分:5)
向我说的一栏就是这一栏:
pk_Name (Clustered) [Name, fkID]
群集密钥确定数据库表中记录的物理顺序。如果Name
是一个字符串并且值以“随机”顺序插入(即并不总是按字母顺序排在表的末尾),则可能存在性能问题,因为数据库总是必须将“插入”行到物理表中。这可能会导致表数据碎片化,这也可能会降低性能。
重新构建聚簇索引还会重新组织物理数据,这可能是您之后看到性能提升的原因。重新计算统计数据也可能是一个因素,但导致非连续插入的主键通常是一个红旗。
此外,您的定义未指定构成表2和表3上的聚簇索引的列,但基于我假设它们被ID
编入索引的名称。
答案 1 :(得分:2)
Ola Hallengren的索引和统计维护工具/脚本是一个很好的工具,可以分析并在必要时重建索引和更新统计信息。我们每晚运行这个东西,以及完整性检查,以保持我们的数据库健康。
答案 2 :(得分:1)
我遇到了类似的问题。 向表中添加数据时,只有在您通过特定更改阈值时才会更新统计信息,如下所述:
除了我们使用数据库的方式发生重大变化外,我还没有找到任何解决此问题的好方法。 同时你可以运行
UPDATE STATISTICS <Table Name>
或
alter INDEX <Index Name> ON <Table Name> rebuild
每晚