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.mzph.cn/news/416316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux命令行sip电话,基于Linux和MiniGUI的SIP电话终端设计

0 引言随着VoIP的迅猛发展,越来越多的个人用户正在使用软件电话、IP电话通过VoIP系统拨打国内和国际长途,IP电话的需求量越来越大,同时,人们对IP电话的要求也越来越高,例如要求IP电话体积小、方便携带、功耗低、待机时…

Maven--反应堆(Reactor)

在一个多模块的 Maven 项目中,反应堆是指所有模块组成的一个构建结构。对于单模块的项目,反应堆就是该模块本身。但对于多模块项目来说,反应堆就包含了各模块之间继承与依赖的关系,从而能够自动计算出合理的模块构建顺序。 模块间…

工作87:element-ui el-table sortable属性 参数详解

表格组件的排序功能,点击排序表头可以进行升序和降序进行排序 上代码 <el-table:data"tableData"style"width: 100%"<!-- 数据由后台进行排序时sortable"custom",需要监听排序点击事件,会返回当前的prop和order -->sort-change"c…

工作88:vue实现当前页面刷新

想必大家在刨坑vue的时候也遇到过下面情形&#xff1a;比如在删除或者增加一条记录的时候希望当前页面可以重新刷新或者如下面这种&#xff1a; 如果希望点击确定的时候&#xff0c;Dialog 对话框关闭的时候&#xff0c;当前http://localhost:9530/#/supplier/supplierAll页面可…

工作89:vue竖直的显示表头的表格(vue版本)

今天遇到一个问题&#xff0c;实现这样一个竖直的显示表头的表格&#xff0c;如下图。默认显示两列。 vue实现代码如下&#xff1a; tableComponent.vue&#xff1a; <template> <table class"mailTable" :style"styleObject" v-if"s_show…

【python之路】数据库2

一、数据库存储引擎 1.什么是存储引擎 mysql中建立的库>文件夹 库中建立的表>文件  现实生活中我们用来存储数据的文件应该有不同的类型&#xff1a;比如存文本用txt类型&#xff0c;存表格用excel&#xff0c;存图片用png等 数据库中的表也应该有不同的类型&#xff0c…

linux服务器配置端口,Linux服务器配置-新增端口

1、我们需要知道操作的Apache配置文件在Linux服务器上面的路径&#xff1a;/etc/apache2/&#xff0c;用cd命令即可&#xff1a;cd /etc/apache2/在服务器上&#xff0c;我们通过ls命令查看配置文件&#xff1a;2、需要用到的是设置端口的文件ports.conf 以及sites-enabled目录…

[BZOJ 2654]tree(陈立杰)

Description 给你一个无向带权连通图&#xff0c;每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。题目保证有解。Input 第一行V,E,need分别表示点数&#xff0c;边数和需要的白色边数。接下来E行,每行s,t,c,col表示这边的端点(点从0开始标号)&#xff0c;…

DM3软件如何在linux中安装,DM3 文件扩展名: 它是什么以及如何打开它?

DM3 疑难解答频繁的 DM3 打开问题ImageJ 不存在你尝试加载 DM3 文件并收到错误&#xff0c;例如 “%%os%% 无法打开 DM3 文件扩展名”。 通常&#xff0c;%%os%% 中会出现这种情况&#xff0c;因为 ImageJ 未安装在你的电脑上。 你将无法双击以打开 DM3&#xff0c;因为你的操作…

ftp 530 linux,Linux启动ftp服务器530 Permission denied解决方法

重新在虚拟机下安装了linux。现在我想启动linux自带的ftp服务器&#xff1a;#service vsftpd start 。如果想linux启动是自动启动ftp服务器&#xff1a;#chkconfig vsftpd on 。运行putty&#xff0c;以root身份进入&#xff0c;出现了报错 530 Permission denied &…

Shiro身份认证授权原理

shiro在应用程序中的使用是用Subject为入口的&#xff0c; 最终subject委托给真正的管理者ShiroSecurityMannager Realm是Shiro获得身份认证信息和来源信息的地方(所以这里是我们实现的)我们只要继承他的实现类重写方法就好了&#xff0c;AuthorizingRealm 身份认证过程 自定义…

linux进程路由策略,linux路由表,策略路由,路由查找

路由表内核中路由表有2种&#xff1a;l 一个是缓存路由(fib)&#xff0c;是自动学习生成自动管理的&#xff0c;用户没必要去干预&#xff0c;但是内核还是提供了方法让用户可以去清空它。但是用户不能设置它的项&#xff0c;但是可以根据这个缓存更新的原理从外部影响他。l 路…

Python namedtuple(命名元组)使用实例

Python namedtuple(命名元组)使用实例 #!/usr/bin/python3import collectionsMyTupleClass collections.namedtuple(MyTupleClass,[name, age, job]) obj MyTupleClass("Tomsom",12,Cooker) print(obj.name) print(obj.age) print(obj.job)执行结果&#xff1a; To…

pd怎么卸载linux系统,parallels desktop11怎么卸载?parallels desktop11卸载方法

parallels desktop11是一款功能强大的MAC虚拟机软件&#xff0c;用户通过该软件可在mac系统下运行安装windows或Linux操作系统&#xff0c;不过很多时候用户在安装后&#xff0c;由于后期没有使用虚拟机的需求&#xff0c;故此想要将其删除&#xff0c;但是又不知道如何操作&am…

linux裸机安装nginx,linux环境下安装nginx步骤 - 进击的乌龟 - 博客园

开始前&#xff0c;请确认gcc g开发类库是否装好&#xff0c;默认已经安装。ububtu平台编译环境可以使用以下指令apt- get install build- essentialapt - get install libtoolcentos平台编译环境使用如下指令安装make&#xff1a;yum -y install gcc automake autoconf libtoo…