如何获取每一步的查询执行结果?
Posted
技术标签:
【中文标题】如何获取每一步的查询执行结果?【英文标题】:How to get the result of query execution at each step? 【发布时间】:2013-06-29 14:02:18 【问题描述】:这是我的查询示例。
select *
from employee as a
where 1=(select count(distinct(b.salary))
from employee as b
where a.salary<b.salary)
我想知道我的外部查询和内部查询运行了多少次。有什么方法可以处理查询中的计数器吗?就像在 Visual Studio 中一样,我们可以在循环的每次迭代中观察任何变量的值,同样我们可以在任何步骤中看到外部和内部查询的结果吗?有没有用于此目的的工具?有什么方法吗?
提前致谢。
【问题讨论】:
您使用的是什么 rdbms?对于 SQL-Server,Profiler 是正确的工具。 我使用的是 sql server 2008。 【参考方案1】:当你执行这个查询时,得到实际的执行计划。它会告诉你执行次数是多少。获取方法如下:How do I obtain a Query Execution Plan?
不可能单步执行 SQL 代码。 SQL 的整个想法是在 what 你想要的结果和 如何 获取结果之间进行分离。因此,如何 SQL 代码的执行可能看起来与您的查询非常相似。 SQL 代码的每个部分都有多个操作,它们执行相同的操作,但根据数据执行不同的操作。
例如,如果您没有任何关于员工的索引,那么您的查询将是一个带有表扫描的嵌套循环。如果表很大,则可能只有一次表扫描带有排序和表假脱机以重用已排序的临时表。如果你有一个关于薪水的索引,那么就会有一个包含一堆索引扫描的嵌套循环。
总之,获取实际执行计划以了解 SQL Server 实际在做什么。
【讨论】:
感谢您的回复,但这篇文章没有给我答案。例如我有两张桌子。 A & B. 如果对表 A 的每一行,B 都是全扫描的。我只想知道在给定条件下比较哪些值以及在每个步骤中返回哪一行。简而言之,我想要一个完整的画面,就像在现实生活中在我面前完成整个操作一样,我正在用我的眼睛观看整个操作。谢谢 @HamidMahmood 执行计划显示 SQL Server 正在做什么。它将显示 B 被完全扫描的次数。 (如果您关心性能,则不应该这样做。)我已经更新了如何获得执行计划的答案。以上是关于如何获取每一步的查询执行结果?的主要内容,如果未能解决你的问题,请参考以下文章