如何优化此查询

     2023-04-14     262

关键词:

【中文标题】如何优化此查询【英文标题】:How to Optimize this Query 【发布时间】:2011-02-19 18:37:38 【问题描述】:

我正在学习 MS SQL Server 2008 R2,所以请原谅我的无知。 这个查询需要 3 秒,我想在 1 秒内完成。 该查询仅用于测试目的,实际上我会加入不同的字段。

select * from
(
select row_number() over(order by t1.id) as n, t1.id as id1, t2.id as id2, t3.id as id3, t4.id as id4, t5.id as id5
from dbo.Context t1
inner join dbo.Context t2 on t1.id = t2.test
inner join dbo.Context t3 on t2.id = t3.test
inner join dbo.Context t4 on t3.id = t4.test
inner join dbo.Context t5 on t4.id = t5.test
) as t
where t.n between 950000 and 950009;

当我在这个表中有几十亿条记录时,恐怕情况会更糟。

我需要从配置中启用多线程吗?

【问题讨论】:

如果您索引 id 列可能会有所帮助。 请告诉我们您想要实现的目标。我们将能够以这种方式更好地帮助您。 @JamesLove:默认情况下不索引主键? @Femaref:我有想要查询的嵌套上下文。 ctx1.outterCtx = ctx2.id 表示 ctx1 嵌套到 ctx2 中。在我的测试查询中,我只想测试许多连接的性能,因为我必须查询许多嵌套到另一个的上下文 @geeko:您说“实际上我会加入不同的字段”,这意味着您显示的查询的任何优化都不一定适用于您的 real 查询。为什么不显示您真正想要优化的查询? 【参考方案1】:

没有真正的方法来优化此类查询的paging 部分,即

t.n between 950000 and 950009

这是真的

 ROW_NUMBER  between 950000 and 950009

如果不完全实现 INNER JOIN,就无法准确地对结果进行行编号。这与具有 Row_Number 的单个表不同 - 查询优化器有时可以只计算索引键并转到直接范围。

您唯一能做的就是确保 JOIN 条件都被完全索引并且索引包括将被选择的列(因此它们成为 COVERING INDEXes)。没有必要显示细节,因为这些不是您真正的专栏。

我需要从配置中启用多线程吗?

默认情况下,[已经]开启了并行性,因此这样的查询很可能会在多个流中收集数据。

【讨论】:

除了索引 JOIN 字段之外没有办法改进这个查询 JOINS 吗?如果不是,那么 NoSQL 数据库怎么样?他们会更好吗?【参考方案2】:

我建议将内部查询创建为索引视图,然后运行您的分页。由于索引视图实际上有一个真正的索引,因此可以使用与表相同的优化技巧。

有关索引视图的更多信息,包括限制,请参阅here。

【讨论】:

如何优化此查询...?

】如何优化此查询...?【英文标题】:HowcanIoptimizethisquery...?【发布时间】:2009-06-2615:32:12【问题描述】:我有两张桌子,一张用于路线,一张用于机场。Routes包含刚刚超过9000行,并且我已对每一列进行了索引。机场只有2000行,... 查看详情

SQL Server - 如何优化此查询?

】SQLServer-如何优化此查询?【英文标题】:SQLServer-howcanthisquerybeoptimized?【发布时间】:2013-07-2218:36:01【问题描述】:此查询平均需要4秒。它将成为存储过程中的子查询,我需要它花费一秒。这是查询:(selectcustomercampaignname+\'$\'... 查看详情

如何使用 5 个子查询优化此查询?

】如何使用5个子查询优化此查询?【英文标题】:HowcanIoptimizethisquerywith5subqueries?【发布时间】:2014-11-2019:09:40【问题描述】:SELECT(SELECTCOALESCE(SUM(t.hours),0)ASallotted_hoursFROMtasksAStWHEREt.projects_id=8ANDt.complete!=100ANDt.nameLIKE\'%Ongoin 查看详情

如何优化此查询

】如何优化此查询【英文标题】:HowtoOptimizethisQuery【发布时间】:2011-02-1918:37:38【问题描述】:我正在学习MSSQLServer2008R2,所以请原谅我的无知。这个查询需要3秒,我想在1秒内完成。该查询仅用于测试目的,实际上我会加入不... 查看详情

如何优化此 SQL Server 查询 - 多个子查询

】如何优化此SQLServer查询-多个子查询【英文标题】:HowtooptimizethisSQLServerquery-Multiplesubqueries【发布时间】:2020-07-2422:41:07【问题描述】:我在SQLServer中有这个带有4个子查询的查询,我正在寻找优化它的方法:DECLARE@INICIODATEDECLARE@... 查看详情

如何在 Postgres 中优化此查询

】如何在Postgres中优化此查询【英文标题】:HowcanIoptimizethisqueryinPostgres【发布时间】:2021-02-1214:19:23【问题描述】:以下查询需要更多时间来运行。如何优化以下查询以运行更多记录?我已经为这个查询运行了ExplainAnalyze。附上... 查看详情

如何使用其中的一些子查询优化此查询

】如何使用其中的一些子查询优化此查询【英文标题】:Howtooptimizethisquerywithsomesubqueriesinit【发布时间】:2013-03-1810:05:46【问题描述】:我的查询是这样的:SELECTdate_format(created_at,\'%Y-%m-%d\')ASthe_date,COUNT(s.id)AStotal,(SELECTCOUNT(ks.id)FRO... 查看详情

如何在 Firebird 2.1 中优化此查询?

】如何在Firebird2.1中优化此查询?【英文标题】:HowcanIoptimizethisqueryinFirebird2.1?【发布时间】:2012-03-0103:47:12【问题描述】:我正在使用Firebird2.1,我需要一些帮助来优化此查询:(可能通过将IN-s替换为JOINS或其他方式来加快速度... 查看详情

如何在 MYSQL 中优化此查询?需要做啥

】如何在MYSQL中优化此查询?需要做啥【英文标题】:HowcanIoptimisethisqueryinMYSQL?Whatneedstobedone如何在MYSQL中优化此查询?需要做什么【发布时间】:2010-08-1900:40:40【问题描述】:请向下滚动到“25/08/2010更新”。我有一个已变成视图... 查看详情

如何在 MySQL 中优化此查询

】如何在MySQL中优化此查询【英文标题】:HowtooptimizethisqueryinMySQL【发布时间】:2015-10-2718:08:21【问题描述】:我有这两张表(Moodle2.8):CREATETABLE`mdl_course`(`id`bigint(10)NOTNULLAUTO_INCREMENT,`category`bigint(10)NOTNULLDEFAULT\'0\',`sortorder`bigint(1 查看详情

如何优化此查询并替换 MAX 函数?

】如何优化此查询并替换MAX函数?【英文标题】:HowcanIoptimizethisqueryandreplacetheMAXfunction?【发布时间】:2014-07-0902:15:52【问题描述】:SELECTMAX(f_orderInteractionID)FROMtOrdersOINNERJOINtOrderInteractionsOIONOI.fk_orderID=O.f_orderIDGROUPBYOI.fk_ord 查看详情

MySQL - 如何优化此查询?

】MySQL-如何优化此查询?【英文标题】:MySQL-Howcanthisquerybeoptimised?【发布时间】:2010-06-2805:04:26【问题描述】:以下查询有效,但10条记录(2秒)的速度非常慢。分析说它创建了一个tmp表,但我不确定为什么。基本上,我将当前... 查看详情

如何优化此查询(或内部 AND 验证)?

】如何优化此查询(或内部AND验证)?【英文标题】:HowCanIoptimizethisquery(ORinsideANDvalidation)?【发布时间】:2011-11-2919:25:20【问题描述】:我遇到了这个查询的问题:SELECTcol1,col2,col3,...,colnFROMMyTableWHEREcol1=@value1AND(ISNULL(col2,\'c\')=ISNU... 查看详情

如何优化此 SQL 查询

】如何优化此SQL查询【英文标题】:HowcanIoptimisethisSQLquery【发布时间】:2011-12-1313:06:25【问题描述】:我正在编写一个软件,用于识别已放在网络服务器(CMS)上但不再需要且应该/可以删除的文件。首先,我尝试手动重现所有必需... 查看详情

我如何优化此查询以用于计算响应的 sql

】我如何优化此查询以用于计算响应的sql【英文标题】:Howcanioptimizethisqueryforsqlforcountingresponse【发布时间】:2019-12-2110:17:41【问题描述】:我有一个问题响应表,当我尝试通过查询来计算问题的响应数以创建图表时,加载需要65... 查看详情

如何优化此查询并使其执行得更快? [关闭]

】如何优化此查询并使其执行得更快?[关闭]【英文标题】:HowcanIoptimizethisqueryandmakeitexecutefaster?[closed]【发布时间】:2013-01-0507:11:19【问题描述】:如何通过此查询获得更快的结果?SELECTpost_idFROMwp_postmetaWHEREmeta_key=\'wpcf-cooler-name... 查看详情

如何使用 JOINS 和嵌套 SELECT 优化此 SQL 查询?

】如何使用JOINS和嵌套SELECT优化此SQL查询?【英文标题】:HowcanIoptimizethisSQLquerywithJOINSandnestedSELECT?【发布时间】:2016-10-0415:24:46【问题描述】:我的SQL查询需要大量时间来执行,因为事务表在某种程度上非常巨大。我正在寻找提... 查看详情

优化 SQL:如何重写此查询以提高性能? (使用子查询,摆脱 GROUP BY?)

】优化SQL:如何重写此查询以提高性能?(使用子查询,摆脱GROUPBY?)【英文标题】:OptimizeSQL:Howtorewritethisquerytoboostperformance?(Usesubqueries,getridofGROUPBY?)【发布时间】:2019-12-2900:51:10【问题描述】:我正在使用MySQL5.7.18-16。我使用... 查看详情