Hint&ordered&leading&use
Oracle官方文档:Oracle Database SQL Language Reference 1、ordered hint 2、leading hint 3、use_nl 1、ordered hint /*+ ORDERED */ The ORDERED hint instructs Oracleto join tables in the order in which they appear in the FROM clause.Oracle rec
Oracle官方文档:Oracle Database SQL Language Reference
1、ordered hint
2、leading hint
3、use_nl
1、ordered hint
/*+ ORDERED */
The ORDERED hint instructs Oracleto join tables in the order in which they appear in the FROM clause.Oracle recommends that you use the LEADING hint, which is more versatile than the ORDERED hint.
When you omit the ORDERED hint from a SQL statement requiring a join, the optimizer chooses the order in which to join the tables. You might want to use the ORDERED hint to specify a join order if you know something that the optimizer does not know about the number of rows selected from each table. Such information lets you choose an inner and outer table better than the optimizer could.
2、leading hint
/*+ LEADING ( [ @ queryblock ] tablespec [ tablespec ]... ) */
The LEADING hint instructs the optimizerto use the specified set of tables as the prefix in the execution plan. This hint is more versatile than the ORDERED hint.
The LEADING hint is ignored if the tables specified cannot be joined first in the order specified because of dependencies in the join graph. If you specify two or more conflicting LEADING hints, then all of them are ignored. If you specify the ORDERED hint, it overrides all LEADING hints.
3、use_nl hint
The USE_NL hint instructs the optimizer to join each specified table to another row source with a nested loops join, using the pecified table as the inner table.
Use of the USE_NL and USE_MERGE hints is recommended with the LEADING and ORDERED hints. The optimizer uses those hints when the referenced table is forced tobe the inner table of a join. The hints are ignored if the referenced table is the outer table.
--USE_NL强制把referenced table作为inner table。如果referenced table 为outer table,则此hint被忽略(即不管用)--个人觉得这句话是废话。
--实例1: --/*+ ordered */ hint实例,表BASOPT上有optid列上的索引PK_BASOPT SQL> set autot trace exp --不用/*+ ordered */hint,BASOPTUSER作为驱动表,用BASOPTUSER去连接BASOPT表 SQL> select optname,userid from basopt a,basoptuser b where a.optid = b.optid and b.userid = 1; 执行计划 ---------------------------------------------------------- Plan hash value: 922486247 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 19 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | | | | | | 2 | NESTED LOOPS | | 1 | 19 | 4 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL | BASOPTUSER | 1 | 8 | 3 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | PK_BASOPT | 1 | | 0 (0)| 00:00:01 | | 5 | TABLE ACCESS BY INDEX ROWID| BASOPT | 1 | 11 | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("B"."USERID"=1) 4 - access("A"."OPTID"="B"."OPTID") --用/*+ ordered */hint 来指定按照from后边表的顺序来连接表,用BASOPT去连接BASOPTUSER表,此时优化器选择了另一种链接方法:MERGE JOIN SQL> select /*+ ordered */ optname,userid from basopt a,basoptuser b where a.optid = b.optid and b.userid = 1; 执行计划 ---------------------------------------------------------- Plan hash value: 2164325570 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 19 | 6 (17)| 00:00:01 | | 1 | MERGE JOIN | | 1 | 19 | 6 (17)| 00:00:01 | | 2 | TABLE ACCESS BY INDEX ROWID| BASOPT | 2 | 22 | 2 (0)| 00:00:01 | | 3 | INDEX FULL SCAN | PK_BASOPT | 2 | | 1 (0)| 00:00:01 | |* 4 | SORT JOIN | | 1 | 8 | 4 (25)| 00:00:01 | |* 5 | TABLE ACCESS FULL | BASOPTUSER | 1 | 8 | 3 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - access("A"."OPTID"="B"."OPTID") filter("A"."OPTID"="B"."OPTID") 5 - filter("B"."USERID"=1) --用use_nl(b)指定使用nested loops连接使用basoptuser作为內表 SQL> select /*+ ordered use_nl(b)*/ optname,userid from basopt a,basoptuser b where a.optid = b.optid and b.userid = 1; 执行计划 ---------------------------------------------------------- Plan hash value: 3306984809 -------------------------------------------------------------------------------- - | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------- - | 0 | SELECT STATEMENT | | 1 | 19 | 7 (0)| 00:00:01 | | 1 | NESTED LOOPS | | 1 | 19 | 7 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL| BASOPT | 2 | 22 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| BASOPTUSER | 1 | 8 | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------- - Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("B"."USERID"=1 AND "A"."OPTID"="B"."OPTID") SQL>
--实例2: --/*+ leading() */ hint实例,表BASOPT上有optid列上的索引PK_BASOPT,表SYSUSER上有userid列上的索引PK_SYSUSER SQL> select optname,c.userid from basopt a,basoptuser b,sysuser c where a.optid = b.optid and b.userid = c.userid and b.userid = 1; 执行计划 ---------------------------------------------------------- Plan hash value: 1787196989 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 22 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | | | | | | 2 | NESTED LOOPS | | 1 | 22 | 4 (0)| 00:00:01 | | 3 | NESTED LOOPS | | 1 | 11 | 3 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | PK_SYSUSER | 1 | 3 | 0 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL | BASOPTUSER | 1 | 8 | 3 (0)| 00:00:01 | |* 6 | INDEX UNIQUE SCAN | PK_BASOPT | 1 | | 0 (0)| 00:00:01 | | 7 | TABLE ACCESS BY INDEX ROWID| BASOPT | 1 | 11 | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - access("C"."USERID"=1) 5 - filter("B"."USERID"=1) 6 - access("A"."OPTID"="B"."OPTID") --设定驱动表b c SQL> select /*+ leading(b c) */ optname,c.userid from basopt a,basoptuser b,sysuser c where a.optid = b.optid and b.userid = c.userid and b.userid = 1; 执行计划 ---------------------------------------------------------- Plan hash value: 3853709033 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 22 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | | | | | | 2 | NESTED LOOPS | | 1 | 22 | 4 (0)| 00:00:01 | | 3 | MERGE JOIN CARTESIAN | | 1 | 11 | 3 (0)| 00:00:01 | |* 4 | TABLE ACCESS FULL | BASOPTUSER | 1 | 8 | 3 (0)| 00:00:01 | | 5 | BUFFER SORT | | 1 | 3 | 0 (0)| 00:00:01 | |* 6 | INDEX UNIQUE SCAN | PK_SYSUSER | 1 | 3 | 0 (0)| 00:00:01 | |* 7 | INDEX UNIQUE SCAN | PK_BASOPT | 1 | | 0 (0)| 00:00:01 | | 8 | TABLE ACCESS BY INDEX ROWID| BASOPT | 1 | 11 | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - filter("B"."USERID"=1) 6 - access("C"."USERID"=1) 7 - access("A"."OPTID"="B"."OPTID") --设定驱动表b a SQL> select /*+ leading(b a) */ optname,c.userid from basopt a,basoptuser b,sysuser c where a.optid = b.optid and b.userid = c.userid and b.userid = 1; 执行计划 ---------------------------------------------------------- Plan hash value: 1915872201 -------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 22 | 4 (0)| 00:00:01 | | 1 | MERGE JOIN CARTESIAN | | 1 | 22 | 4 (0)| 00:00:01 | | 2 | NESTED LOOPS | | | | | | | 3 | NESTED LOOPS | | 1 | 19 | 4 (0)| 00:00:01 | |* 4 | TABLE ACCESS FULL | BASOPTUSER | 1 | 8 | 3 (0)| 00:00:01 | |* 5 | INDEX UNIQUE SCAN | PK_BASOPT | 1 | | 0 (0)| 00:00:01 | | 6 | TABLE ACCESS BY INDEX ROWID| BASOPT | 1 | 11 | 1 (0)| 00:00:01 | | 7 | BUFFER SORT | | 1 | 3 | 3 (0)| 00:00:01 | |* 8 | INDEX UNIQUE SCAN | PK_SYSUSER | 1 | 3 | 0 (0)| 00:00:01 | -------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - filter("B"."USERID"=1) 5 - access("A"."OPTID"="B"."OPTID") 8 - access("C"."USERID"=1) --设定驱动表b c,并且b和c表之间的连接使用nested loops连接 SQL> select /*+ leading(b c) use_nl(b c) */ optname,c.userid from basopt a,basoptuser b,sysuser c where a.optid = b.optid and b.userid = c.userid and b.userid = 1; 执行计划 ---------------------------------------------------------- Plan hash value: 683070851 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 22 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | | | | | | 2 | NESTED LOOPS | | 1 | 22 | 4 (0)| 00:00:01 | | 3 | NESTED LOOPS | | 1 | 11 | 3 (0)| 00:00:01 | |* 4 | TABLE ACCESS FULL | BASOPTUSER | 1 | 8 | 3 (0)| 00:00:01 | |* 5 | INDEX UNIQUE SCAN | PK_SYSUSER | 1 | 3 | 0 (0)| 00:00:01 | |* 6 | INDEX UNIQUE SCAN | PK_BASOPT | 1 | | 0 (0)| 00:00:01 | | 7 | TABLE ACCESS BY INDEX ROWID| BASOPT | 1 | 11 | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - filter("B"."USERID"=1) 5 - access("C"."USERID"=1) 6 - access("A"."OPTID"="B"."OPTID") SQL>

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Reihenfolge der SPDIFOUT-Verbindungsleitungen auf dem Motherboard. Ich bin kürzlich auf ein Problem bezüglich der Verdrahtungsreihenfolge der Drähte gestoßen. Ich habe online nachgesehen, dass 1, 2 und 4 Ausgang, +5 V und Masse entsprechen, während andere Informationen besagen, dass 1, 2 und 4 Ausgang, Masse und +5 V entsprechen. Am besten schauen Sie im Handbuch Ihres Motherboards nach. Wenn Sie das Handbuch nicht finden, können Sie es mit einem Multimeter messen. Suchen Sie zuerst nach der Erdung, dann können Sie die Reihenfolge der restlichen Verkabelung bestimmen. So schließen Sie die VDG-Verkabelung des Motherboards an. Wenn Sie die VDG-Verkabelung des Motherboards anschließen, müssen Sie ein Ende des VGA-Kabels an die VGA-Schnittstelle des Monitors und das andere Ende an die VGA-Schnittstelle der Grafikkarte des Computers anschließen. Bitte achten Sie darauf, es nicht an den VGA-Anschluss des Motherboards anzuschließen. Sobald die Verbindung hergestellt ist, können Sie es tun

Was ist AMP Coin? Der AMP-Token wurde 2015 vom Synereo-Team als Haupthandelswährung der Synereo-Plattform erstellt. Ziel des AMP-Tokens ist es, Benutzern durch vielfältige Funktionen und Verwendungsmöglichkeiten ein besseres digitales Wirtschaftserlebnis zu bieten. Zweck des AMP-Tokens Der AMP-Token hat mehrere Rollen und Funktionen in der Synereo-Plattform. Erstens können Benutzer im Rahmen des Kryptowährungs-Belohnungssystems der Plattform AMP-Belohnungen verdienen, indem sie Inhalte teilen und bewerben, ein Mechanismus, der Benutzer dazu ermutigt, aktiver an den Aktivitäten der Plattform teilzunehmen. AMP-Tokens können auch zur Bewerbung und Verbreitung von Inhalten auf der Synereo-Plattform verwendet werden. Benutzer können die Sichtbarkeit ihrer Inhalte auf der Plattform erhöhen, indem sie AMP-Tokens verwenden, um mehr Zuschauer zum Ansehen und Teilen zu bewegen

Dieser Artikel enthält eine detaillierte Einführung in die Installation und Registrierung einer Bitcoin -Handelsanwendung. Mit der Bitcoin Trading App können Benutzer Kryptowährungen wie Bitcoin verwalten und handeln. Der Artikel führt die Benutzer Schritt für Schritt durch den Installations- und Registrierungsprozess, einschließlich Herunterladen von Anwendungen, Erstellen von Konten, Durchführung der Identitätsprüfung und der ersten Einzahlung. Ziel des Artikels ist es, Anfängern klare und leicht verständliche Richtlinien zu geben, um ihnen zu helfen, die Welt des Bitcoin-Handels leicht zu betreten.

Ouyi, auch bekannt als OKX, ist eine weltweit führende Kryptowährungsplattform. Der Artikel enthält ein Download -Portal für das offizielle Installationspaket von Ouyi, mit dem Benutzer den Ouyi -Client auf verschiedenen Geräten installiert werden können. Dieses Installationspaket unterstützt Windows, Mac, Android und iOS -Systeme. Nach Abschluss der Installation können sich Benutzer registrieren oder sich beim Ouyi -Konto anmelden, Kryptowährungen mit dem Handel mit den von der Plattform erbrachten Diensten anmelden.

In diesem Artikel werden die zehn Top -Apps der digitalen Währung der Welt der Welt empfohlen, darunter Binance, OKX, Huobi Global, Coinbase, Kraken, Gate.io, Kucoin, Bitfinex, Gemini und Bitstamp. Diese Plattformen haben ihre eigenen Eigenschaften in Bezug auf Transaktionspaarmenge, Transaktionsgeschwindigkeit, Sicherheit, Einhaltung, Benutzererfahrung usw. Binance ist beispielsweise für seine hohe Transaktionsgeschwindigkeit und umfangreiche Dienste bekannt, während Coinbase besser für Anfänger geeignet ist. Durch die Auswahl einer Plattform, die Sie entspricht, müssen Sie Ihre eigenen Bedürfnisse und die Risikotoleranz umfassend berücksichtigen. Erfahren Sie mehr über die weltweit Mainstream -Handelsplattformen für digitale Währung, damit Sie sicher und effizient digitaler Handel mit dem Handel mit digitalem Handel durchführen können.

Es gibt keine einzelne "beste" -D -App für digitale Währung, und die Wahl hängt von den persönlichen Bedürfnissen ab. 1. OKX hat leistungsstarke Funktionen und reichhaltige Währungstypen. Bei der Auswahl müssen Sie Sicherheit, Liquidität, Handhabungsgebühren, Funktionen, Benutzererfahrung und andere Faktoren berücksichtigen.

Der Markt für virtuelle Währungen boomt und viele Handelsplattformen werden geboren. In diesem Artikel werden die drei führenden Anwendungen im Bereich Virtual Currency eingeführt, das für ihre hervorragende Benutzererfahrung, leistungsstarke Sicherheit und umfangreiche Funktionen bekannt ist. Zu diesen Anwendungen gehören Binance, Gate.io und Ouyi, die den Anlegern bequeme und sichere Möglichkeiten zum Kauf, Verkauf, Handeln und Verfolgen virtueller Währungen bieten.

In diesem Artikel werden 10 Mainstream -Kryptowährungsbörsen eingeführt, in denen grundlegende Informationen wie ihre Einrichtung, Dienstleistungsumfang, Sicherheit, Liquidität, Transaktionsgebühren usw. abdeckt werden. Zu diesen Börsen gehören: OKX, Binance, Gate.io, Bitget, Coinbase, Huobi, Kucoin, Crypto.com, Gemini und Kraken.
