日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 驱动表提示错误代码,oracle驱动表以及如何确定驱动表

發(fā)布時間:2024/7/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 驱动表提示错误代码,oracle驱动表以及如何确定驱动表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

驅(qū)動表普遍認為是由SQL語句的寫法決定的,簡單的說,就是FROM語句后面的表列表中的最后一個。由于SQL語句是從后向前進行分析,Oracle會根據(jù)FROM語句從后到前將各個表依次連接起來。

SQL> CREATE TABLE T1 AS SELECT * FROM USER_TABLES;

表已創(chuàng)建。

SQL> CREATE TABLE T2 AS SELECT * FROM USER_INDEXES;

表已創(chuàng)建。

SQL> SET AUTOT ON EXP SQL> SELECT COUNT(*) FROM T1, T2 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 MERGE JOIN 3 2 SORT (JOIN) 4 3 TABLE ACCESS (FULL) OF 'T2' 5 2 SORT (JOIN) 6 5 TABLE ACCESS (FULL) OF 'T1'

SQL> SELECT COUNT(*) FROM T2, T1 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 MERGE JOIN 3 2 SORT (JOIN) 4 3 TABLE ACCESS (FULL) OF 'T1' 5 2 SORT (JOIN) 6 5 TABLE ACCESS (FULL) OF 'T2'

根據(jù)這個例子,可以看出,SQL語句的寫法對于驅(qū)動表的影響。

然而,實際上驅(qū)動表和連接順序的選擇要比上面的觀點復雜的多,下面對稍微調(diào)整一下這個例子。

SQL> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (TABLE_NAME);

表已更改。

SQL> SELECT COUNT(*) FROM T1, T2 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 NESTED LOOPS 3 2 TABLE ACCESS (FULL) OF 'T2' 4 2 INDEX (UNIQUE SCAN) OF 'PK_T1' (UNIQUE)

SQL> SELECT COUNT(*) FROM T2, T1 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 NESTED LOOPS 3 2 TABLE ACCESS (FULL) OF 'T2' 4 2 INDEX (UNIQUE SCAN) OF 'PK_T1' (UNIQUE)

僅僅是給T1增加了一個主鍵,就發(fā)現(xiàn)不管SQL語句怎么寫驅(qū)動表都是T2。

即使是RBO,確定表連接順序的規(guī)則也是比較復雜的:

1.優(yōu)化器產(chǎn)生一系列連接順序,每次均把不同的表作為驅(qū)動表。而且,優(yōu)化器根據(jù)下面的算法產(chǎn)生每個連接順序。

為了確定連接順序中各個表的位置,優(yōu)化器根據(jù)RBO執(zhí)行計劃的排名,在剩余的表中找到表訪問路徑排名最高的表,然后不斷的重復這個過程,依次確定連接順序中每個表的前后順序。

對于連接順序中的每張表,優(yōu)化器根據(jù)執(zhí)行計劃的排名選擇一種連接方式將當前表和前面的表或數(shù)據(jù)源連接在一起。

2.優(yōu)化器在執(zhí)行計劃的結(jié)果集中進行選擇。優(yōu)化器的目標是最大程度的選擇內(nèi)部表采用索引掃描方式的NESTED LOOPS連接操作。

通常情況下,優(yōu)化器在選擇執(zhí)行計劃時,不會考慮表在FROM語句中出現(xiàn)的順序。優(yōu)化器依次根據(jù)下面的規(guī)則來作出選擇

優(yōu)化器選擇執(zhí)行計劃使得內(nèi)部表為全表掃描的NESTED LOOPS連接盡可能的少;

如果采用上面的條件出現(xiàn)了平局的情況,則優(yōu)化器選擇盡可能少出現(xiàn)SORT MERGE操作的執(zhí)行計劃;

如果仍然出現(xiàn)平局的情況,則優(yōu)化器將選擇表訪問路徑中排名最高的表作為驅(qū)動表;

如果這時仍然是平局,則優(yōu)化器會把FROM語句中最后出現(xiàn)的表最為驅(qū)動表。

總結(jié)

以上是生活随笔為你收集整理的oracle 驱动表提示错误代码,oracle驱动表以及如何确定驱动表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。