由于列大小过长,查询需要更多时间来执行

RGS*_*RGS 0 sql-server sql-server-2012

当我尝试在 SSMS 中执行以下查询时,由于列大小过长(列名称:关键字,列大小:nvarchar(4000)),查询需要更多时间(超过 10 分钟)来执行。员工表包含 6000 条记录。

Select EmployeeId, EmployeeName, Designation, Keywords
From Employees
Where StatusFlag = 'L'
Run Code Online (Sandbox Code Playgroud)

我为上表创建了下面的非聚集覆盖索引。

Create NonClustered Index NCI_Employees_StatusFlag On Employees(StatusFlag) Include (EmployeeId, EmployeeName, Designation, Keywords) 
Run Code Online (Sandbox Code Playgroud)

如何更快地从上表中检索数据?

Jos*_*ell 5

即使所有 6,000 行都装满了 4,000 个 Unicode 字符(8,000 字节),也只有 45 MB 的数据。即使使用冷缓存,也不可能需要 10 分钟才能读取那么多内容。

正如Randi Vertongen在评论中提到的那样,您可能会被某些东西挡住。这里的答案不会是索引。sp_WhoIsActive在您的查询执行时运行以查看发生了什么。那应该告诉你:

  • 查询正在等待什么
  • 如果它被阻止(以及是什么阻止了它)