`

oracle普通索引介绍(单字段索引)

阅读更多

 

oracle复合索引介绍(多字段索引) : http://ysj5125094.iteye.com/blog/1745367

 

 

(1).门牌号码:ROWID

        欲介绍索引,先介绍一个概念:ROWID.在数据库中,每条记录都有自己的物理地址,叫做ROWID,包括所属的数据文件号,数据块号,以及在该数据块中的具体位置信息等.ROWID就相当于一个门牌号码,也相当于一本书的页码.

(2).索引就是目录:

        索引就是一本书的目录.索引包括被索引的字段值和所对应的ROWID,分别相当于目录中的书条目和对应的页码.

 

20/80规则: 80%的性能问题可以由20%的优化技术所解决.

 

 

错误的SQL语句会导致索引的不执行.如下:

to_char(DJ_SZ.JDRQ,'yyyy-mm-dd') between '2012-04-01' and '2012-04-17' 
-- 即便在DJ_SZ.JDRQ字段建立了索引,该索引仍然无法启动,依然是全表扫描.因为索引树中记录的是DJ_SZ.JDRQ字段值,而不是to_char(DJ_SZ.JDRQ,'yyyy-mm-dd')数值.因此DJ_SZ.JDRQ索引无法使用.上述语句片段应该修改成:
DJ_SZ.JDRQ between to_date('2012-04-01','yyyy-mm-dd') and to_date('2012-04-17','yyyy-mm-dd')

 

开发规范之一 : 不要轻易在字段前增加函数.

-- oracle其实挺笨的,如果这样写:
DJ_NSRZT_BG.YXQ_Z + 7 < sysdate
-- oracle 也不会启动YXQ_Z字段上的索引,必须修改成这样:
DJ_NSRZT_BG.YXQ_Z < sysdate - 7 -- 原因同上

 

开发规范之二 : 尽量不要将字段嵌入表达式之中.

 

 

针对前面问题,为什么不可以直接使用oracle函数索引呢?例如:

create index idx_1 on DZ_SJ(to_char(JDRQ,'yyyy-mm-dd'));

的确,只要数据库运行在基于成本的优化器(CBO)模式下,并且将参数query_rewrite_enabled设置为true,就可以启动函数索引.而且不需要进行复杂的语句转换,提高语句的可读性.但本人建议,尽量少使用函数索引,而将函数进行转换.原因如下:

(1).函数索引是需要维护的.当数据库每次进行该表的DML操作时,oracle都需要维护函数索引,也就是说需要进行一次计算,维护成本将高于普通索引.

(2).函数索引的计算值可能大于原字段值,将消耗更多的索引存储空间.

 

 

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    ORACLE9i_优化设计与系统调整

    第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1...

    收获不知Oracle

    6.2.4.2 排序只需取部分字段 347 6.2.4.3 关于排序的经典案例 349 6.2.5 各类连接限制场景对比 350 6.2.5.1 哈希连接的限制 350 6.2.5.2 排序合并的限制 353 6.2.5.3 嵌套循环无限制 355 6.3 你动手装备的表连接威震...

    MySQL中or、in、union与索引优化详析

    date,下单日期,有普通索引,管理后台经常按照date查询 uid,用户ID,有普通索引,用户查询自己订单 status,订单状态,有普通索引,管理后台经常按照status查询 money/time,订单金额/时间,被查询字段,无...

    MySQL索引类型Normal、Unique和Full Text的讲解

    MySQL的索引类型有普通索引(normal),唯一索引(unique)和全文索引(full text),合理使用索引可大大提升数据库的查询效率,下面是三种类型的索引的介绍 normal:这是最基本的索引,它没有任何限制,MyIASM中默认的...

    Oracle事例

    单字段时:create table 表名 (col1 char(8), cno char(4) REFERENCE course); 多个字段时,在最后加上 Foreign Key (字段名) REFERENCE 表名(字段) 连带删除选项 (on delete cascade 当指定时,如果父表中的记录...

    PRM-DUL Oracle(数据库恢复工具) v4.1.zip

    PRM-DUL Oracle数据库恢复工具,一款专为Oracle数据救援而研发的企业级工具。可在多个操作平台(AIX/HPUX/SOLARIS/Linux/Windows)使用并支持对Oracle 9i/10g/11g/12c各版本数据库的数据救援工作。软件基于JAVA 开发...

    MySQL题-付答案-一起学习

    唯⼀普通索引⻚? change Buffer基本概念 Change Buffer:写缓冲区,是针对⼆级索引(辅助索引) ⻚的更新优化措施。 作⽤: 在进⾏DML操作时,如果请求的辅助索引(⼆级索引)没有在缓冲 池中时,并不会⽴刻将磁盘⻚...

    mysql笔记,mysql优化图解

    b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] c: 分表技术(水平分割、垂直分割) d: 读写[写: update/delete/add]分离 e: 存储过程 [模块化编程,可以提高速度] f: 对mysql配置优化...

    精通sql结构化查询语句

    21.1 VB 6.0开发环境 21.1.1 VB 6.0介绍 21.1.2 VB 6.0的版本 21.1.3 VB 6.0开发环境 21.2 VB 6.0连接数据库 21.2.1 VB 6.0中的数据库控件介绍 21.2.2 数据库连接举例 21.3 数据查询应用 21.3.1 普通数据查询的实现 ...

    Toad 使用快速入门

    SQL编辑器中不仅包括标准的编辑命令,也包括一些增强的功能,如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB 的内容,对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    java面试800题

    Q0033 在Oracle数据库中,给定一个表,其中一列有索引,现在用这个列作为查询条件,因为用到了索引,速度一定会快吗? 答案是否定的,比如在这个列中使用‘%sdfd%’来进行模糊查询 Q0034 给定了一些创建数据库试图...

    SOPI垂直搜索引擎系统 V2.2

    作用:此服务用来自动匹配字段信息,如根据网站中分析的地区信息\\行业分析信息等各类分类信息匹配成为系统需要的信息,如从网站获得的地区信息:浙江省&gt;&gt;杭州市&gt;&gt;将这一内容自动匹配为浙江省或杭州市,也可以根据企业...

    PL/SQL 基础.doc

    注:1) id(索引) 的数目的限制由BINARY_INTEGER的范围决定(-2147483647&lt;-----&gt;2147483647); 2) TABLE类型与map,_T&gt;类似; 3) 表中的元素可以是复合类型; 4) KEY 没有必要是顺序的; 5) 当数据被插入表中的时候,...

    经典SQL语句大全

    在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb '...

    数据库操作语句大全(sql)

    在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb ...

    sql经典语句一部分

    在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb '...

    php网络开发完全手册

    14.5 索引与唯一值的介绍 229 14.6 数据的操作 230 14.6.1 表的修改 230 14.6.2 表的删除 231 14.6.3 数据的查询 231 14.6.4 数据的插入 236 14.6.5 数据的更新 238 14.6.6 数据的删除 239 14.7 小结 239 第15章 ...

    mysql数据库的基本操作语法

    Ø 常用查询 MySQL结束符是“;”结束。 1、 显示所有数据库 show databases; 2、 删除数据库 drop database dbName; 3、 创建数据库 create database [if not exists] dbName;...可以完成单条记录、多条记录、单表...

Global site tag (gtag.js) - Google Analytics