在SQL Server 2014中,从表中简单选择需要24秒

时间:2017-10-27 10:10:23

标签: sql performance indexing query-optimization sql-server-2014

我有一个名为[cwbOrder]的表,目前有1.277.469行。我正在使用SQL Server 2014,我正在UAT环境中进行这些测试,在生产时这个查询需要更长的时间。

如果我尝试选择所有行,请使用:

SELECT * FROM cwbOrder

从表中检索所有数据需要24秒。我已经读过关于如何对谓词(WHERE)中使用的列进行索引很重要,但我仍然无法理解简单选择如何花费24秒。

enter image description here

在其他更复杂的查询中使用此表会为查询生成大量额外工作量,尽管我已在索引列上创建了JOIN。此外,我从该表中仅选择了2列然后将其加入另一个表,此操作仍然需要相当长的时间。作为示例,请考虑以下查询:

enter image description here

下面我附上了两个表的索引结构,以说明问题:

enter image description here

PK_cwbOrder是cwbOrder表中id_cwbOrder列的索引。

enter image description here

编辑1:我添加了查询的执行计划,其中我将cwbOrder表与cwbAction表一起加入。

enter image description here

考虑到上面的信息,有什么方法可以让我的查询更快?

1 个答案:

答案 0 :(得分:0)

这种select可能很慢的原因有很多:

  • 行的行数或行数可能非常大,需要大量时间来传输或延迟。
  • 桌面上的其他操作可能会锁定表格。
  • 数据库服务器或网络可能非常繁忙。
  • "表"可能真的是一个运行复杂查询的视图。

您可以测试不同方面。例如:

SELECT TOP 10 <one column here>
FROM cwbOrder o

这会返回一个非常小的结果集,只读取表的一小部分。这会读取整个表但返回一个小结果集:

SELECT COUNT(*)
FROM cwbOrder o