【问题标题】:Unknown execution time behavior of sql querysql查询的未知执行时间行为
【发布时间】:2014-02-20 12:36:55
【问题描述】:

案例一:

选择列 1, 克罗姆2, 栏目3 FROM 表名 WHERE Column3 在(选择 COL3 来自#TempTable)

案例 2:

声明@valueClo3 varchar(50) 设置@valueClo3 = 'AnyValue' 选择列 1, 克罗姆2, 栏目3 FROM 表名 WHERE Column3 在 (@valueClo3)

案例 1 花费了太多时间(大约 3 分钟),而案例 2 只需要 10 秒。 #TempTable 只有一个值 'AnyValue'

【问题讨论】:

  • 对匹配行数和执行计划的估计可能不同。
  • 这是您的完整查询还是您发布了它的简化版本?对于上面发布的案例,不太可能有如此大的时差。
  • 你能发布每个查询的执行计划吗?这应该突出差异的来源。

标签: sql sql-server-2005 execution-time


【解决方案1】:

子查询比任何其他选择都需要更长的时间。话虽如此,IN 会更快,但仍可用作“或”。

我建议尝试加入您的临时表。根据您的示例,内部联接可能会实现您的目标。

【讨论】:

  • 为了测试,使用 SQL Profiler 并在每个之前发出 DBCC DROPCLEANBUFFERS。注意 CPU 时间和读取,以确定哪一个最适合您。请记住,临时表上的连接列可能需要根据其大小编制索引。
  • 我通过在表上应用索引提高了我的查询性能。我的索引按 column3、column2 和 column1 的顺序排列,这提高了性能。
猜你喜欢
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多