问题标签 [join-hints]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4769 浏览

tsql - T-SQL - 为什么 INNER MERGE JOIN 使多个连接定义执行得更快

我对此感到非常困惑。我无法提供示例,因为最终的 SQL 语句是动态构建的,并且许多函数和过程在其中发挥作用......

一般来说,我有五个联接。我注意到当我删除其中一个时,语句执行 0 秒,否则超过 4 分钟。然后,我查看了实际的执行计划,并注意到“合并连接”需要很多成本。在 Google 中搜索给我留下了“INNER MERGE JOIN”使用或“OPTION (MERGE JOIN)”和语句的结尾。

这非常好,因为查询现在执行了 0 秒。但我的问题是为什么?

我做了一些研究,发现要使用 MERGE 连接,必须对两个语句进行排序 - 这不是我的情况,它们不是,我仍然在 0 秒内得到正确的结果。

有没有人在 T-SQL 想法方面取得进展,为什么会导致这种情况?

我知道我已经有了解决方案,但我想知道为什么它会起作用以及发生了什么。

0 投票
1 回答
771 浏览

sql-server - 使用连接提示优化 SQL Server 查询

我们的系统中有一个查询,它使用的逻辑读取量存在问题。查询经常运行(一天几次),但它本质上是报告(即收集数据,它不是事务性的)。

在让几个人看过之后,我们正在考虑几个不同的选择。

  1. 使用 OPTION (FORCE ORDER) 和一些 MERGE JOIN 提示让优化器更有效地处理数据(至少在已测试的数据上)。

  2. 使用临时表来分解查询,这样优化器就不会处理非常大的查询,从而可以更有效地处理它。

我们真的没有选择进行重大模式更改或任何事情,调整查询是这个问题的集合点。

查询提示选项的性能比其他选项好一点,但在这一点上,这两个选项的性能都是可以接受的。

那么问题来了,你更喜欢哪一个?查询提示被认为有点危险,因为我们正在覆盖优化器等。临时表解决方案需要写出到 tempdb 等。

过去,我们已经能够在较大的报告查询中使用临时表来获得巨大的性能提升,但这通常是针对运行频率低于此查询的查询。

0 投票
1 回答
75 浏览

sql - INNER LOOP JOIN 失败

我需要更新一个名为FamName的表中调用的字段,该表Episode使用随机生成的日耳曼语名称来自另一个名为的表Surnames,该表有一个名为Surname.

为此,我首先在表格中添加了一个ID字段NONCLUSTERED INDEXSurnames

然后我尝试通过更新我的Episode

我试图使用LOOP连接提示强制查询“循环”。当然,如果我不强制优化器循环(使用LOOP),我将为所有行获得相同的德语名称。但是,这个查询奇怪地返回了零行受影响。

为什么这会返回零受影响的行,如何修改它才能工作?


请注意,我可以使用WHILE循环来执行此更新,但我想要一种简洁的方式来执行此操作,并找出在这种特殊情况下我做错了什么。

0 投票
1 回答
6603 浏览

sql-server - 使用索引提示和连接提示

(询问:调整 sql server - views。对不起,我需要查看我的帖子)。

我需要在连接中添加提示(在执行连接时强制使用 ID 上的索引)和选择(在 where 子句中强制使用名称上的索引),如本文中提到的最后一个查询。我不知道正确连接(用于调整)的正确语法是什么,以及强制索引的正确语法是什么,where 子句将使用它,而我正在从视图中选择。

我在 sql server 2012 中创建了一个视图,例如:

我希望连接 table1 和 table2 将具有正确的索引(id),但是当我这样做时:

我希望最后一个选择将带有列“名称”的索引。

正如我所描述的,带有提示(调整)的sql server中正确的语法是什么,运行得最好?

我想强制使用索引仅用于连接目的(列= id),并在执行时强制使用索引名称:

就像是

我不想在执行视图时强制使用视图添加提示的最终用户 - 只需将视图作为他的视图和适当的索引提示即可。(或者,如果不可能 - 我该怎么做)。

需要样品,请。

我有这样一个简单的视图(无论基于什么表......它非常适合我工作的公司。这是 Microsoft Dynamics AX 2012+ 一些额外的表)。

当我做:

有很多耗时,甚至 inventTable 在 itemid 上有一个索引。

当我做:

视图运行了几秒钟。

0 投票
1 回答
70 浏览

sql-server - Transact-SQL:连接提示 - 差异、性能、限制

我想知道连接提示(MERGE、HASH、LOOP、REMOTE)之间的区别。那么,在哪些情况下我应该选择哪一种,为什么?如何知道我应该使用哪个提示?

使用提示是否有任何赞成或反对?

如果我使用正确的提示,我的查询性能会更好吗?也有不好的事情吗?

当我使用这些提示时是否有任何限制?

0 投票
1 回答
8914 浏览

sql-server - SQL Server 2008 中的循环连接

我不清楚下面提到的查询之间的工作差异。

具体来说,我不清楚OPTION(LOOP JOIN).

第一种方法:这是使用的传统连接,比以下所有方法都昂贵。

第二种方法:它包含OPTION在带有排序数据的语句中,只是优化。

第三种方法:在这里,我不清楚查询如何工作并包含OPTION!! loop join

任何人都可以解释彼此之间的区别和工作方式以及优势吗?

注意:这些不是嵌套的 OR 哈希循环!

0 投票
1 回答
60 浏览

php - Codeigniter 加入命中

如何将连接提示传递给 codeigniter?

我想运行以下 SQL 查询:

如何使用 codeigniter 运行上述查询?您可以指定连接类型,但不能传入连接提示。