oracle 列級外鍵,Oracle外鍵列上是否需要索引?

外鍵列上缺少索引會帶來兩個問題,限制并發性、影響性能。而這兩個問題中的任意一個都可能會造成嚴重性能問題。 無論是Or

外鍵列上缺少索引會帶來兩個問題,限制并發性、影響性能。而這兩個問題中的任意一個都可能會造成嚴重性能問題。

無論是Oracle的官方文檔,還是在Tom的書中都說明了兩種情況下可以忽略外鍵上的索引。其實我認為不需要那么麻煩,與增加一個索引所帶來的性能開銷和磁盤空間開銷相比,,確實索引可能引發的問題要嚴重得多。因此,我會選擇在所有的外鍵列上添加索引,雖然可能導致創建了部分多余的索引,但是這樣相除了外鍵約束由于確實索引所帶來的性能問題和并發性問題。

如果外鍵列上缺少索引,從主表關聯子表的查詢就只能對子表選擇全表掃描的查詢,這是顯而易見的問題:

SQL> CREATE TABLE T_P (ID NUMBER, NAME VARCHAR2(30));

表已創建。

SQL> ALTER TABLE T_P ADD PRIMARY KEY (ID);

表已更改。

SQL> CREATE TABLE T_C (ID NUMBER, FID NUMBER, NAME VARCHAR2(30));

表已創建。

SQL> ALTER TABLE T_C ADD CONSTRAINT FK_T_C

2 FOREIGN KEY (FID)

3 REFERENCES T_P (ID);

表已更改。

SQL> INSERT INTO T_P SELECT ROWNUM, TABLE_NAME FROM ALL_TABLES;

已創建884行。

SQL> INSERT INTO T_C SELECT ROWNUM, MOD(ROWNUM, 884) + 1, OBJECT_NAME

2 FROM ALL_OBJECTS;

已創建30339行。

SQL> COMMIT;

提交完成。

SQL> SELECT A.ID, A.NAME, B.NAME

2 FROM T_P A, T_C B

3 WHERE A.ID = B.FID

4 AND A.ID = 880;

ID NAME NAME

---------- ------------------------------ ------------------------------

880 T_COMPRESS /eb2b6b5_Options1

880 T_COMPRESS DATE

880 T_COMPRESS DEF$_SCHEDULE

880 T_COMPRESS GV_$SESSION_EVENT

.

.

.

880 T_COMPRESS sun/io/ByteToCharCp1251

880 T_COMPRESS /5ba3839f_DirStateFactoryResul

880 T_COMPRESS USER_INDEXTYPES

已選擇34行。

執行計劃

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 MERGE JOIN

2 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_P'

3 2 INDEX (UNIQUE SCAN) OF 'SYS_C002964' (UNIQUE)

4 1 FILTER

5 4 TABLE ACCESS (FULL) OF 'T_C'

統計信息

----------------------------------------------------------

0 recursive calls

0 db block gets

190 consistent gets

0 physical reads

0 redo size

1829 bytes sent via SQL*Net to client

394 bytes received via SQL*Net from client

4 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

34 rows processed

由于缺少索引,上面的這個關聯查詢只能采用MERGE JOIN,而如果聯立了外鍵列上的索引:

SQL> CREATE INDEX IND_T_C_FID ON T_C (FID);

索引已創建。

SQL> SELECT A.ID, A.NAME, B.NAME

2 FROM T_P A, T_C B

3 WHERE A.ID = B.FID

4 AND A.ID = 880;

ID NAME NAME

---------- ------------------------------ ------------------------------

880 T_COMPRESS /e1538703_EntryInfoImpl

880 T_COMPRESS /7b832daf_ObjectStreamClassCom

880 T_COMPRESS java/awt/peer/ScrollbarPeer

880 T_COMPRESS /1982bd95_PermissionsEnumerato

.

.

.

880 T_COMPRESS /9ebda46b_GetInterface

880 T_COMPRESS /c71f85e7_DefaultPopupFactory

880 T_COMPRESS /7b549d81_DataFormatException

已選擇34行。

執行計劃

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 NESTED LOOPS

2 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_P'

3 2 INDEX (UNIQUE SCAN) OF 'SYS_C002964' (UNIQUE)

4 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_C'

5 4 INDEX (RANGE SCAN) OF 'IND_T_C_FID' (NON-UNIQUE)

統計信息

----------------------------------------------------------

0 recursive calls

0 db block gets

42 consistent gets

1 physical reads

0 redo size

1829 bytes sent via SQL*Net to client

394 bytes received via SQL*Net from client

4 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

34 rows processed

logo.gif 本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴 本文系統來源:php中文網

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540909.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 改變詞典順序_按詞典順序排列的功率集

python 改變詞典順序Description: 描述: This is a standard interview problem to find out the power sets in lexicographic order of a given set of numbers using backtracking. 這是一個標準的面試問題,它使用回溯來按給定數字集的字典順序查找能…

oracle創建用戶名了,oracle創建用戶名

創建用戶//創建用戶名create user username identified by password‘’//賦權限Grant Connect,Resource,DBA to UserName;plsql developer配置下載地址http://ah1.down.chinaz.com/201011/plsql8.04cn.zip右擊"我的電腦" - "屬性" - "高級" - &…

webpack學習筆記1

webpack學習筆記1:基本概念 前言: 現在在日常的開發中,webpack已經是必不可少的東西了,現在的需求基本都是用webpack對資源進行打包整合,所以打算寫一點關于webpack的東西,這是第一篇,主要是介紹…

ruby 嵌套函數_Ruby嵌套有示例的循環

ruby 嵌套函數嵌套循環 (Nested for loop) Nesting of for loop means one for loop is available inside another for loop. It means that there are two loops, then the first one is an outer loop and the second one is the inner loop. Execution will take place in t…

oracle10數據庫鏈接失敗,Oracle10g出現Enterprise Manager 無法連接到數據庫實例解決辦法...

剛裝好 10g 時,把的監聽端口是1521.后來把端口改成了1568了,登上em發現Enterprise Manager 無法連接到數據庫實例 ,連接字符串的端口仍是1521,如何解決這個問題。登陸:出現下面錯誤:Enterprise …

springJdbc in 查詢,Spring namedParameterJdbcTemplate in查詢

springJdbc in 查詢,Spring namedParameterJdbcTemplate in查詢, SpringJdbc命名參數in查詢,namedParameterJdbcTemplate in查詢 >>>>>>>>>>>>>>>>>>>>>>>>>>…

oracle 11g r2版本號,Oracle 11g r2新增版本功能(二)

在11.2中,Oracle數據庫引入的版本的概念,這為應用程序的升級提供了極大的方便。這篇簡單描述版本的實現和查詢方式。前一篇簡單描述了版本,下面接著上面的例子看看Oracle是如何實現這個功能的:SQL> select synonym_name, table…

python 添加圖例_Python | 在圖例標簽中添加Sigma

python 添加圖例Sigma (𝜎) is very often used greek mathematical letters and has a higher repetition in probability. In this article, we are going to add 𝜎 using a command in matplotlib. Sigma(𝜎)是希臘數學字母中經常使用的字…

【51CTO學院】搜索V2.0——新的搜索,只為給你更好的

為了讓你能快速、準確的找到自己心儀的內容,51CTO學院產品及研發用盡了洪荒之力研發近2個月終于將搜索進行了全面升級。 搜索看似簡單,實則要做到精準和智能卻不是件易事,為了讓學員快速找到自己所需,節省找課時間,更高…

oracle擴容日志文件,ORACLE 加大日志文件

--新建臨時日志文件alter database add logfile group 4 (‘/u01/app/oracle/oradata/orcl/redo04.log‘) size 10m;alter database add logfile group 5 (‘/u01/app/oracle/oradata/orcl/redo05.log‘) size 10m;alter database add logfile group 6 (‘/u01/app/oracle/orad…

java多線程總結(二)

線程一般有6個狀態: 新建狀態:NEW 可運行狀態:RUNNABLE 休眠狀態:TIMED_WAITING 等待狀態:WAITING 阻塞狀態:BLOCKED 終止狀態“TERMINATED 當我們使用new創建線程之后,線程處于新建狀態,當調用…

scandir函數_PHP scandir()函數與示例

scandir函數PHP scandir()函數 (PHP scandir() function) The full form of scandir is "Scan Directory", the function scandir() is used to get the list of the files and directories available in the specified directory. scandir的完整格式為“ Scan Direc…

韓順平.2011最新版.玩轉oracle視頻教程筆記,韓順平.2011最新版.玩轉oracle視頻教程(筆記)...

韓順平.2011最新版.玩轉oracle視頻教程ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied 警告: 您不再連接到 ORACLE。 SQL> show user; USER 為 ""SQL> conn system/p; 已連接。SQL> grant connect to xiaoming; 授權成功。SQL>…

方冪序列 c+~+_C ++編程中的Trigraph序列

方冪序列 c~Trigraph Sequences in C are the set of three characters starting from double question marks (??). These set of the characters replaces by a single character specified in the below table, C 中的Trigraph序列是從雙問號( ?? )開始的三個…

oracle sysauth,sysauth$基表的用戶權限的一點分析

select privilege#,level from sysauth$ connect by grantee#prior privilege# and privilege#>0 start with grantee#:1 and privilege#>0如上的sql語句頻繁執行,其實對于遞歸sql對于自己初始oracle才一年的菜鳥一般是略去不看的,eygle前輩們有時…

ansys 內聚力_內聚力 軟件工程

ansys 內聚力凝聚 (Cohesion) In general terms, the word cohesion means the action or act of forming a united whole. According to the definition of Cambridge University, cohesion is defined as "the state of sticking together, or being in close agreement…

oracle認證都需要考哪幾個方面,Oracle OCP認證要通過哪些考試

Oracle OCP認證要通過哪些考試Oracle OCP DBA認證是所有Oracle認證中最普及的一種認證,這一認證過程是專為那些想要從事Oracle管理的專業數據庫管理人員設計的,適用于Oracle9I DBAs的OCP認證通過改進,刪除了備份和恢復以及網絡考試&#xff0…

左側固定 右側自適應三種方法

第一種&#xff1a;float 單一層浮動法 例如&#xff1a;左側固定成100px; 則核心代碼 左側&#xff1a;width:100px;float:left; 右側 width:auto;margin-left:100px; 實例&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8&q…

ruby 集合 分組_在Ruby中打印集合的元素

ruby 集合 分組We have gone through the implementation of sets in Ruby. They are very similar to arrays. Now, let us see how we print the elements present in a set. There are no indexes present in the sets because sets are used to store the large elements. …

linux下tmp目錄屬性,Linux:文件夾屬性及umask

回顧&#xff1a;文件在小&#xff0c;也要占用一個Block如&#xff1a;echo > a1.logls a1.log(文件大小為1k)du a1.log(文件大小也應該為1k&#xff0c;如果不是1k&#xff0c;可能selinux是打開的)du -s a1.log文件夾的權限&#xff0c;系統中的文件夾默認權限基本上都為…