【发布时间】:2012-07-06 13:00:38
【问题描述】:
我有一个连接 24 个表(除了 1 个是左外连接)和 83 列的视图。当我从没有 order by 子句的视图中选择 * 时,它会在大约 4:27 秒内返回 27k 行所有列。如果我执行相同的选择但添加了“order by requestId”子句,则需要 83 分钟才能完成。 被排序的列在原始表中被索引。
我尝试按 requestId 将它包装在 Select * from (.......) 顺序中,但得到相同的结果。
关于去哪里的建议
【问题讨论】:
-
这个特定的查询真的需要来自所有 24 个表的列吗?也许您应该考虑针对基表编写有针对性的查询,而不是从超级视图中继承所有噪音。
-
不幸的是,它确实如此,返回的数据被导出到 excel 中以供进一步分析。
-
好吧,我想看看执行计划,但我担心他们会让我做噩梦。 :-(
-
如果直接运行查询,使用 ORDER BY 而不使用视图会发生什么?
-
我刚刚得知许多视图曾经是内连接,但现在已转换为左外连接。在此切换之前,顺序没有时间上的差异。两种方式返回的行数相同。
标签: performance sql-server-2008-r2 sql-order-by