Oracle外键列上能否需求索引?-性能调优[Oracle防范]
本文“Oracle外键列上能否需求索引?-性能调优[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
外键列上贫乏索引会带来两个问题,限制并发性、影响性能.而这两个问题中的肆意一个都大概会造成严重性能问题.
无论是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 表已更改. 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 已成立30339行. SQL> COMMIT; 提交完成. SQL> SELECT A.ID, A.NAME, B.NAME ID NAME NAME 已挑选34行. 履行筹划
统计信息 |
由于贫乏索引,上面的这个关联查询只能采取MERGE JOIN,而假如联立了外键列上的索引:
SQL> CREATE INDEX IND_T_C_FID ON T_C (FID); 索引已成立. SQL> SELECT A.ID, A.NAME, B.NAME ID NAME NAME 已挑选34行. 履行筹划
统计信息 |
以上是“Oracle外键列上能否需求索引?-性能调优[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |