【问题标题】:measuring the time of each operation in SQL query测量 SQL 查询中每个操作的时间
【发布时间】:2019-01-27 11:36:53
【问题描述】:

我有一个包含不同连接的树 (A⨝B)⨝(C⨝D)⨝(E⨝F)⨝(G⨝H)⨝(I⨝J) 格式的 SQL 查询。我想知道那有什么方法可以分别找到每个连接操作的时间,例如子表达式(A⨝B)可以花费多少时间。或者 (C⨝D) 可以取。而不是整个表达式。或者我们如何才能只找到子表达式 (A⨝B)⨝(C⨝D) 的时间。我已经使用 Java 语言将我的 SQL 查询转换为树。提前致谢。我正在使用 SQL Server 来实现我的查询

【问题讨论】:

  • 为您想到的每个感兴趣的子查询设置统计时间并设置统计信息
  • 你能告诉我如何将这个查询分解为子查询“从氧气中选择 Oxygen.OxygenRatio, Water.WaterTemp,Oil.Oil_limit, Engine.EngineID 加入水 Oxygen.OxygenID=Water .OxygenID JOIN Oil ON Oil.OilID=water.WaterID Join Engine ON Engine.EngineID=Water.WaterID JOin Fuel ON Fuel.WaterID=Water.WaterID"
  • 请注意——这些连接看起来有问题。 JOIN Oil ON Oil.OilID=water.WaterID 还有: Join Engine ON Engine.EngineID=Water.WaterID 不应该是“JOIN Oil ON Oil.WaterID=water.WaterID”或“JOIN Oil ON Oil.OilID=water .OilID”?
  • 你有没有使用SSMS查看执行计划(ctrl + L)?如果这还不够好,您还想了解关于查询执行的哪些信息?

标签: sql sql-server database optimization


【解决方案1】:

我不确定这是否是您需要的,但如果您可以拆分每个操作,您可以尝试使用 DATEDIFF。

DECLARE @timer1 DATETIME
DECLARE @timer2 DATETIME

SET @timer1 = GETDATE()
--stuff to measure here
SET @timer2 = GETDATE()
SELECT DATEDIFF(millisecond,@timer1,@timer2 ) AS time_spent

我认为您可以比较不同的查询,看看哪一个做得最好。

【讨论】:

  • 因此,如果我们这样做“设置统计时间选择 Oxygen.OxygenRatio, Water.WaterTemp,Oil.Oil_limit, Engine.EngineID from Oxygen set statistics time off JOIN Water ON Oxygen.OxygenID=Water .OxygenID JOIN Oil ON Oil.OilID=water.WaterID Join Engine ON Engine.EngineID=Water.WaterID JOin Fuel ON Fuel.WaterID=Water.WaterID".. 它给了我们错误
  • 我不知道您是否可以在连接之间进行测量,但您可以分别测量不同的选择语句并查看差异。首先用一个连接测量,然后用 2 个连接、3 个连接、4 个连接......以及不同的组合。我认为这取决于每个表中存储的数据量以及您加入的变量类型(但似乎您只加入 id 这是正确的方式)。
  • 如果您可以为您的表和一些假数据添加 SQL 代码,我可以尝试运行一些查询并发布代码和我的结果。
猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多