【发布时间】:2015-05-08 06:28:30
【问题描述】:
我需要检索我应该跳过并获取的记录范围。但是,我在本地 SQL Server 和 SQL Azure 上运行都得到了结果,但时间差别很大。两个数据库具有相同的索引。
例如,我有一个包含 700 万条记录的表,我有这样的查询: SELECT TOP(100) a.Time, a.SiteID FROM (SELECT a.Time, a.SiteID, row_number() OVER (ORDER BY a.Time DESC) AS [row_number] FROM [Table] 作为 WHERE a.SiteID =第1111章 632900
在 SQL Azure 中:它会在 30 秒到 1 分钟内给出结果。 在本地 SQL Server 中:它几乎在实例时间内给出结果。
我可以做些什么来缩短 SQL Azure 上的执行时间?
问候 格蕾丝
【问题讨论】:
-
您使用的是哪个版本的 sql azure?请查看性能层@msdn.microsoft.com/en-us/library/azure/dn741336.aspx Azure 和本地的查询计划看起来相同吗?
-
在 SQL Azure 中,我使用“标准”,性能级别为 S0 (10DTUS)。我检查了执行计划,Cloud 和 On-premises 在 [Table].[PK_Table_1] 的 Key Lookup (Clustered) 上具有相同的 99%,这是 [Table] 列“ID”的主键,它是唯一的自动-增量列。
-
这解释了缓慢的原因,因为您在本地获得的资源必须远高于您在 Azure 中获得的标准 S0 层资源。您可以尝试的一些事情是压缩表以减少要扫描的页面数(这可以稍微增加 CPU)。将结果缓存在您的应用程序中,而不是每次都查询。此外,您可能需要扩展以比较性能提升。如果您的数据库尚未在 V12 中,您可能需要升级以获得更好的性能,因为它使用 SSD