Azure SQL数据库中的索引

问题描述:

我有一个Azure SQL数据库,迄今为止已证明非常成功。这是大约20个月大,没有维护...但它处理了很多。某些表有数百万行,当查询索引列时,查询响应时间在使用与之交谈的Web应用程序时是可以接受的。Azure SQL数据库中的索引

但是,我读到了有关重建索引的冲突建议。

这家伙说,有在做没有意义: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中有很多我无法控制的东西,它是否对重建索引更有意义?

BTW:我不是,也永远是一个DBA ...只是开发商如果实际使用索引

+0

index advsior是什么意思? https://azure.microsoft.com/en-in/documentation/articles/sql-database-index-advisor/ –

重建索引会没关系。如果索引不被用于您正在运行的查询,那么您将看不到差异。如果只是轻微使用,如果您运行统计信息,则会看到细微差异。如果它被大量使用,大部分时间你都会看到性能提升。另一件需要注意的问题是,索引碎片有时是不相关的。通常,当我选择是否重建索引时,我会看看页数与碎片相结合。如果即时通讯运行一个查询,我有性能问题,即时通讯使用索引,索引有超过16000页,并且索引超过50%碎片,不适重建它。如果桌子很小或者我可以使用在线选项,我将继续并同时重建所有这些选项。

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

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

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

+3

很好解释 - 谢谢。我想最值得注意的是数据库的大小从6.2GB降低到了4.9 ...所以另一个好处是空间的减少。 – collumbo