我在一个Azure SQL数据库中有一个非常大的表,该表已经有超过3000万行,并且每天都有大约50-60k的插入到表中
我们在网络应用程序中有多个页面,需要从这个大表中获取数据...每个页面都有不同的查询表的方式,包括需要哪些列以及where子句中提到的列。
由于Db处于天蓝色状态,因此天蓝色会自动使用一些索引来查看正在执行的查询,由于数据库大小非常大,这些查询现在引起性能问题。在SQL中使用dmv,我发现数据大小约为15gbs,但索引几乎为65gbs
在这种情况下如何创建有效索引?
答案 0 :(得分:2)
Brentozar publiched their free script可以很好地进行分析,例如:
根据上述脚本,可以推断应该在Azure SQL数据库中删除哪些索引。
As MSDN says it is possible to drop indexes at Azure SQL Database.
答案 1 :(得分:1)
通过自动调整创建的索引不会使您的数据库表现不佳,但是,不能定期对索引进行碎片整理和不定期更新数据库统计信息肯定会导致性能下降。此外,如here所述,索引碎片会增加数据库的大小,这是您上面提到的症状之一。请执行here中所述的维护任务。
答案 2 :(得分:0)
您是否以索引大小计算聚集索引?由于该索引存储数据,因此不应将其计为“索引”大小。那只能是所有其他索引类型(非聚集,非聚集列存储等)。
创建有效索引始终与查询调优的基础有关。首先,确定运行缓慢的查询。其次,查看代码和执行计划,以了解查询在做什么以及为什么它运行缓慢。通常,问题不在于索引,而在于代码。然后,根据您在代码和执行计划中找到的内容,首先修复代码,其次,创建或修改索引以支持代码。确保在更改之前和之后都在测量查询性能,以确保更改会带来改进。
此外,Azure SQL数据库不维护统计信息。您必须进行设置。您的某些统计信息可能需要特别的关怀和照顾。您需要仔细查看它们,以识别那些没有更新的老化的或需要完全扫描更新的与应采样的(以及样本量)。
简而言之,性能调整Azure SQL数据库与其他任何SQL Server数据库的性能调整基本相同。