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,一经查实,立即删除!

相关文章

select * 和select 所有字段的区别

文章取自http://blog.csdn.net/u014305991/article/details/44964171 MySQL 5.1.37 表记录数41,547,002,即4000w行 使用远程客户端取1000条数据,统计时间: SELECT * FROM dmsp.dmsp_dimension_content LIMIT 0, 1000; 时间2.218s,…

php的strpos不支持数字,php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创...

php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来!PHP 开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚…

css动画详解 (transition animation)

属性 transition(4个属性): transition: width 5s ease 3s; /*简写*/transition-property: width; /*过渡属性名*/transition-duration: 5s; /*持续时间,默认为0*/transition-timing-function: ease; /*速度*/transition-delay: 3s; /*延迟*…

php ajax session死锁,session过期,ajax请求处理

session会话过期,如果是请求。可以直接定位到页面。如果是ajax请求。无法跳转到页面。可以通过如下方式实现,在Response的输出流里面,向前端写一段html代码来实现。public boolean preHandle(HttpServletRequest request, HttpServletRespons…

NYOJ题目 263 精挑细选

题目描述: 小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管。这听起来不算什么,但是这根钢管的要求可真是让他犯难了,要求如下:1、 这根钢管一定要是仓库中最长的&…

充电桩系统php源码,源码 充电桩程序设计 - 下载 - 搜珍网

压缩包 : e0f671190e843b596bf8d7dfd98914.zip 列表源码/00/源码/00/delay.crf源码/00/delay.d源码/00/delay.o源码/00/gui.crf源码/00/gui.d源码/00/gui.o源码/00/inc/源码/00/inc/delay.h源码/00/inc/io_bit.h源码/00/inc/main.h源码/00/inc/stm32f10x_conf.h源码/00/inc/stm…

mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)

MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败。查看目前配置: show VARIABLES like %max_allowed_packet%; 显示的结果为: ----------------------------- |…

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…

linux文件基础知识,linux文件系统基础知识

利用直接指针、单级间接指针、二级间接指针、三级间接指针可保存的最大文件大小为&#xff1a;1024*121024*2561024*256*2561024*256*256*25616843020 KB&#xff0c;约 16GB若数据块大小为2048B&#xff0c;指针占4B&#xff0c;则最大文件大小为&#xff1a; 2048*122048*512…

[LeetCode] 547. Friend Circles Java

题目&#xff1a; There are N students in a class. Some of them are friends, while some are not. Their friendship is transitive in nature. For example, if A is a direct friend of B, and B is a direct friend of C, then A is an indirect friend of C. And we de…

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

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

linux文件系统叫什么,【整理】什么是根文件系统(rootfs=Root Fils System)

Linux系统中的根文件系统&#xff0c;Root FileSystem&#xff0c;简称为rootfs&#xff1b;关于rootfs&#xff0c;之前一直很迷惑&#xff0c;不知道所要表达的真正的含义&#xff1b;即便是通过buildroot自己建立了相关的rootfs之后&#xff0c;还是没能很明白的理解&#x…

工作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…