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).函数索引的计算值可能大于原字段值,将消耗更多的索引存储空间.
分享到:
相关推荐
文档标题“Oracle数据字典各字段解析.pdf”表明该文档专注于解析 Oracle 数据库中数据字典的各个字段。数据字典是 Oracle 数据库中存储数据库结构信息的特殊表,它记录了数据库中所有对象的定义和相关信息。Oracle ...
- 普通索引:最基本的索引类型,允许索引字段中有重复的值。 - 唯一索引:索引的每一项都是唯一的,可确保列中的数据唯一性,提高查询效率。 - 反向键索引:存储数据的顺序与实际相反,适用于频繁范围查询和排序...
创建全文索引与创建普通索引类似,但需指定`indextype is ctxsys.context`和参数,如`lexer`定义词法分析器,`sync(on commit)`确保每次提交时自动同步索引。如果需要对多个字段创建多字段全文索引,可以通过设置...
本文将详细介绍如何通过在线重定义(DBMS_REDEFINITION)将普通表转换为分区表,这是官方给出的四种方法之一,且对系统的影响最小。 在线重定义是一种在不影响用户访问的情况下,改变表结构的方法。以下是将普通表...
在开发涉及Blob字段的Oracle应用程序时,应合理设计数据库架构,考虑使用索引和分区策略以提高查询效率。同时,注意备份和恢复策略,因为Blob数据的恢复可能比普通数据更复杂。此外,理解并有效利用DBMS_LOB包的功能...
- 实验者提到了普通用户可能需要管理员权限才能执行某些操作,如创建视图和索引,这反映了Oracle中的权限管理系统。 8. **SQL操作技巧**: - 使用`NOT IN`、`NOT EXISTS`等条件判断时,需注意它们在特定情况下的...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB字段常被用来存储超过4000字节的信息。Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和...
在配置文件中,我们需要定义索引字段,例如 ID、名称、描述等字段。我们还需要定义数据源,例如 Oracle 数据库的连接信息。最后,我们需要定义索引更新策略,例如全量索引或增量索引。 测试结果 在本文中,我们...
索引和视图是 Oracle 数据库管理系统的重要组成部分。在本系统中,我们将创建多个索引和视图,以提高数据库的查询效率。 索引包括单列索引和组合索引两种。在本系统中,我们将创建多个索引,以提高数据库的查询效率...
首先,我们来看如何明确地创建普通索引。基本语法如下: ```sql CREATE INDEX index_name ON table_name (field_name) TABLESPACE tablespace_name PCTFREE 5 INITRANS 2 MAXTRANS 255 STORAGE (MINEXTENTS ...
- **普通索引**:用表中的任意列构建的索引,无特殊限制。 - **全文索引**:适用于搜索大文本对象的索引。 - **组合索引**:基于多个列构建的索引,所有列值均不能为空。 ##### B-Tree索引 - **定义**:B-Tree是一...
- 与普通的子查询相比,使用`EXISTS`可以减少查询的复杂度和提高性能。 14. **使用EXISTS代替DISTINCT**: - 当需要查询某一列的唯一值时,使用`EXISTS`通常比使用`DISTINCT`更高效。 综上所述,Oracle性能优化...
此外,为了方便查询和使用,我们还应考虑建立合适的索引,比如针对常用查询字段(如省份或城市名称)创建全文索引或普通索引。同时,定期更新数据,以适应行政区划的变化。 总的来说,“省市县行政区域数据字典”是...
此外,还可以创建索引以提高查询性能,索引可以是普通索引也可以是唯一性索引(UNIQUE),其中唯一索引保证了索引列的值不重复。 Oracle数据库教程提供了关于SQL语言的实用知识,帮助读者理解如何使用SQL语言来操作...
- **临时表空间**: 用于临时操作,如排序和索引构建。 - **撤销表空间**: 用于存储撤消数据,支持事务的回滚。 #### 十八、表空间与数据文件的关系 - **解析**: 一个表空间可以由一个或多个数据文件组成,但每个...
3. **创建表结构**:根据Shapefile的字段信息,在Oracle数据库中创建相应的表结构。这可能需要使用SQL语句,创建空间类型列,如MDSYS.SDO_GEOMETRY,以存储地理特征。 4. **分批次导入数据**:遍历Shapefile的数据...
在实际生产环境下,有时需将超大规模数据(如超过2亿条)导入分区表,但因原表与目的分区表的字段不一致,且用Kettle等转换工具极易失败,而用insert into select t1,t2.. from tab的Oracle SQL方式直接执行将导致...
ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...
- **普通索引**: `idx_表名_字段名`,例如 `idx_sales_orders_order_date`。 - **主键索引**: `pk_idx_表名_字段名`,例如 `pk_idx_sales_orders_order_id`。 **5. 字段命名规范** - 字段命名应具有描述性,避免...
- 对于索引组织表(Index Organized Table, IOT),只能支持普通分区,不支持复合分区,并且分区依赖列必须是主键。 - 全局索引和本地索引的选择很重要,全局索引提供了更多的灵活性但可能需要额外的维护工作;本地...