如何使用最优查询自动重现相同的结果集?

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 的原因

【讨论】:

以上是关于如何使用最优查询自动重现相同的结果集?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SqlCommand 返回多个结果集?

如何使用格式化的日期时间字段获取 django 查询集结果

JPA:如何将原生查询结果集转换为 POJO 类集合

21《MySQL 教程》ORDER BY 排序

如何使用 Django 中另一个查询集的结果过滤查询集?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?