【问题标题】:SQL Execution in Azure taking a very long timeAzure 中的 SQL 执行需要很长时间
【发布时间】:2017-02-09 00:28:28
【问题描述】:

我正在使用 ASP.NET Core 1.1。

以下是最耗时并导致所有这些问题的查询:

C#

    List<Message> messages =await _context.Messages.Where(m => m.UserId.Equals(_userManager.GetUserId(User)))
    .Select(m => new Message { ID = m.ID, DateTime = m.DateTime, Text = m.Text }).ToListAsync();

SQL

SELECT [m].[ID], [m].[DateTime], [m].[Text] FROM [Messages] AS [m] WHERE [m].[UserId] = @__GetUserId_0

执行计划统计:

我的网站变得非常缓慢且没有响应,有时会显示错误。

【问题讨论】:

  • 您的执行计划显示了近 500,000 行的索引扫描。好像你正在做一个完整的扫描,而不是点击索引。但是如果没有看到你的索引,这有点难以分辨。
  • 查询返回多少行?查询在 SSMS 中需要多长时间(所有行都出现?)
  • @DavidMakogon 这很有趣,什么会导致跳过索引?
  • 哪些索引是“必需索引”?您是否在 UserID 上创建了索引?
  • 此对话应移至Stack Overflow Chat(chat.stackoverflow.com) 与在 cmets 中进行讨论。

标签: azure asp.net-core azure-sql-database


【解决方案1】:

正如我在 cmets 中所说:您的执行计划显示了近 500,000 行的索引扫描。似乎您正在执行完整扫描,而不是点击索引。

我怀疑在 UserId 上添加索引可以解决此问题,因为这是您的 WHERE 子句中使用的唯一字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2011-03-14
    相关资源
    最近更新 更多