如何使用最优查询自动重现相同的结果集?
Posted
技术标签:
【中文标题】如何使用最优查询自动重现相同的结果集?【英文标题】:How can you reproduce the same resultset with an optimal query automatically? 【发布时间】:2022-01-12 07:12:43 【问题描述】:是否可以让 MSSQL Management Studio 生成一个查询来重现您之前找到的结果集,但使用可能的最佳方式来重新创建它?
也许有一种方法可以告诉数据库它应该返回哪些行,而不是通过 WHERE 条件寻找正确的行?所以一旦你找到了行,你就不必再搜索了?
所以我的想法是:当您放置类似的条件时
Where col1 = 10
数据库将检查第 1 行 col1 的值 10,然后检查第 2 行 col1,依此类推。 就像在寻找一样,这需要时间。然而,如果你可以只做一个直接询问特定行的语句,你会更快吗?
我的意思是您也不需要搜索列:您只需说给我 col1 或 col2 或其他任何内容
【问题讨论】:
能否详细解释一下您的问题 那不是很好。一台可以自动将任何错误查询变成好的查询的机器。 我投票结束这个问题,因为“答案只是“不——这是不可能的” @MartinSmith,这不是关闭问题并没有回答的理由。回答是/否的问题仍然是合法问题。如果您认为这是最佳答案,请提供它作为答案。一些最好的问题是以简短直接的方式提出的,它们的答案可以用一个词来表达。 在这种情况下,问题并不完全清楚(至少对我而言),我认为更多信息和截图可能会有很大帮助 【参考方案1】:简短的回答是:否
是否可以让 MSSQL Management Studio 生成一个查询来重现您之前找到的结果集
SQL Server Management Studio 不存储您的查询或查询返回的结果 SET。它只是一个客户端应用程序,它将查询传递给数据库服务器并呈现服务器返回的结果。
另一方面,SQL Server 确实存储了您执行的所有查询(在一段时间内,取决于多个参数)。使用以下查询,您可以获得服务器执行的最后一个查询:
SELECT execquery.last_execution_time AS [Date Time], execsql.text AS [Script] FROM sys.dm_exec_query_stats AS execquery
CROSS APPLY sys.dm_exec_sql_text(execquery.sql_handle) AS execsql
ORDER BY execquery.last_execution_time DESC
GO
...用最好的方法重新创建它?
当您执行查询时,服务器和 SSMS 可能会提供有关查询的一些警报和建议,这可以帮助我们构建更好的查询,但 SQL Server 和 SQL Server Management Studio 不会为您构建基于先前查询的结果集的更好查询
这就是我们有 DBA 的原因
【讨论】:
以上是关于如何使用最优查询自动重现相同的结果集?的主要内容,如果未能解决你的问题,请参考以下文章