繁体   English   中英

Azure SQL数据库中的索引

[英]Indexes in Azure SQL Database

我有一个Azure SQL数据库,到目前为止已经证明非常成功。 它大约有20个月的历史,没有维护......但它已经处理了很多。 某些表具有数百万行,并且在查询已编制索引的列时,在使用与其对话的Web应用程序时,查询响应时间是可接受的。

但是,我阅读了关于重建索引的相互矛盾的建议。

这家伙说这样做没有意义: http//beyondrelational.com/modules/2/blogs/76/posts/15290/index-fragmentation-in-sql-azure.aspx

这家伙说继续重建: https//alexandrebrisebois.wordpress.com/2013/02/06/dont-forget-about-index-maintenance-on-windows-azure-sql-database/

我在一些存储几千行的小表上运行了一些重建索引语句。 一些碎片会下降大约1/2 ...然后,如果我第二次运行它,它可能会下降约

根据桌子的大小,这些重建在大约2-10秒内完成...

然后我运行了一个索引,该索引在一个有大约200万行的表上有以下碎片:PK__tmp_ms_x__CDEC17C03A4CDB46 55.2335782060565 PK__tmp_ms_x__CDEC17C03A4CDB46 0 IX_this_is_my_fk_index 15.7538877620014

花了33分钟。

结果是PK__tmp_ms_x__CDEC17C03A4CDB46 0.01 PK__tmp_ms_x__CDEC17C03A4CDB46 0 IX_this_is_my_fk_index 0

问题:执行上述操作后,查询速度并没有真正改变。 这是正常的吗?

鉴于我在SQL Azure中无法控制许多事情,它对重建索引是否有意义?

顺便说一句:我不是,也不是DBA ...只是一个开发人员

如果实际使用索引,重建索引将很重要。 如果索引不用于您正在运行的查询,那么您将看不到差异。 如果它只是轻微使用,如果你运行统计数据,你会看到一个微小的差异。 如果它被大量使用,您应该会在大多数情况下看到良好的性能提升。 Microsoft SQL需要注意的另一件事是索引碎片有时无关紧要。 通常当我选择是否重建索引时,我会查看页数并结合碎片。 如果即时运行查询并且我遇到了性能问题,并且即时使用索引,并且索引超过16000页,并且索引碎片超过50%,则重建它。 如果表格很小或者我可以使用在线选项,我将继续并同时重建所有这些选项。

特别是对于Azure,我的观点是,如果你试图提高性能,它仍然是一个很好的步骤,因为它很容易,即使你不能确定结果。 无论是否共享服务以及是否可以控制硬件层,查看索引碎片和重建索引都是您可以访问的,那么为什么不使用它呢?

所以我想简短的回答是肯定的,在某些情况下。

我建议,而不是手动检查索引并重建它们,建立一个夜间或每周作业,当您的数据库最不活跃时运行。 让它遍历所有表并重建索引。 如果你有很多表,你也可以给它一个设定的运行时间,然后让它“有状态”(你可以使用一个表来保留进度信息),这样它就会记住它停止的地方并在下一次计划的运行中恢复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM