`

informix建索引

阅读更多

 如果查询结果仅为一行或很少几行时(高选择性high selectivity),利用索引进行查询会大大提高效率。相比之下,如果没有索引,查询则只能顺序扫描整个表。在OLTP环境下,事务处理在很大程度上依赖于索引。只有在表很小时,才会顺序扫描表。系统会根据SQL语句中的WHERE子句判断是否使用索引。顺序扫描表会使系统性能受到严重影响。sysmaster中sysptntab表中的pf_seqscnas列显示了所进行的顺序扫描。SET        EXPLAIN命令同样可以提供关于SQL语句如何访问数据库中的重要信息。

      DSS环境中的应用经常会查询出大量数据(低选择性 low selecviity),甚至整张表。顺序扫描对于这样的查询更为适合,因为此时顺序扫描可以利用light scan。light scan缓冲区位于共享内存的虚拟段与驻留段无关。关于light scan,以后内容中还将详述。

      建立索引的代价

      虽然索引可以很大地提高高选择性查询的性能,但维护这些索引是需要付出代价的。

      以INSERT语句为例,在进行插入时系统首先将读取被插入表的索引以定位新记录关键字的位置。然后系统在将新记录写入数据页的同时还必须将新索引项写入索引节点。如果导致索引节点分裂,系统则必须多次写索引页与INSERT语句相似,DELETE语句也要求读入整个索引以定位索引节点位置,并置上删除标志。在删除索引时还需要处理索引节点合并、整理等问题。

      在执行UPDATE语句时,必须首先定位并且删除旧的关键字然后插入新的关键字。所以在UPDATE语句必须两次读取索引。

      在实际系统中通常把索引的根节点和第一级节点读入共享内存中,但如果需要访问更低层次的索引节点则必须进行磁盘操作。       

      索引类型

      通常建立分离索引(detached)或基于表达式的索引分片(expression based fragmented)。分离索引和分片索引可以使得索引的extent内页连续,因而能提高性能。而对于不分片的表来说,附加索引(attached)在建立索引时,索引页和数据页交叉存放在一起,因而会增加磁头寻找时间。

      对于中、小型表应该建立分离索引。对于经常访问的大表应建立基于表达式的分片索引,以减少索引页的数量和提高检索速度。索引分片不宜太多,以免表达式计算开销过大。根据索引的大小,一般可以分为4片。索引分片不支持轮转法(round  robin)。

      分离式索引与数据页分别存放在不同的数据空间中。例如:

      CREATE INDEX index1 ON TABLE table_name(col1) in idxldbs;

      基于表达式的分片索引在FRAGMENT BY EXPRESSION 子句指定的数据空间中创建。例如:

      CREATE INDEX index1 on TABLE table_name(col1)

      FRAGMENT BY EXPRESSION

      col1>=0 and col1<=25000 in idxldbs1

      col1>=25001 and col1<=50000 in idxldbs2

      col1>=50001 and col1<=75000 in idxldbs3

      col1>=750001 and col1<= 100000 in idxldbs4;       

      隐式索引

      在定义约束条件时如果没有可利用的索引,系统将创建隐式索引。用户不能对隐式索引指定数据空间的位置、分片策略或者填充因子。隐式索引创建在数据库(而非表)所在地数据空间中,这给磁盘管理和性能带来了一些影响。

      用户如果需要建立约束条件,最好能先创建与约束条件完全匹配的显式索引然后用ALTER TABLE命令增加约束条件。这样该约束条件就可以利用显式索引而不必再建立隐式索引。例如按如下方式:

      CREATE TABLE table_name( col1 INTEGER, col2 INTEGER, col3 CHAR(25), ) in tableldbs;

      CREATE unique INDEX index1 ON TABLE table_name(col1) in idxldbs;

      ALTER TABLE table_name ADD CONSTRAINT PRIMARYKEY(col1);

      而不要按如下方式:

      CREATE TABLE table_name(

      col1 INTEGER,

      col2 INTEGER,

      col3 CHAR(25),

      PRIMARY KEY (col1)

      ) in tableldbs;

      FILLACTOR(填充因子)

      对于SELECT操作,将FILLFACTOR 设为100

      对于SELECT 和DELETE操作将FILLFACTOR 设为100

      对于INSERT 和 UPDATE操作将FILLFACTOR设为50到70

      CREATE INDEX index1 ON TABLE table_name(col1) in idx1 

        dbs FILLFACTOR 70;      

      填充因子决定了在建立索引时每一索引页的填充度。该参数是可以改变的。参数FILLFACTOR缺省值为90。如果只是改变某个索引的设置,请使用CREATE 

        INDEX的FILLFACTOR子句。

      设置较大的填充因子可以使索引更紧凑、使缓冲区更有效同时也可以减少检索记录时读取的页数。对于只读表应将FILLFACTOR设置为100。

      对于只执行读和操作的表,如果将FILLFACTOR设置为100,在删除记录时可以减少合并索引节点、整理索引树的可能性。

      对于有大量插入和更新操作的表,应该将FILLFACTOR设置为50到70。由于填充因子较小,在插入和更新操作时将延迟索引节点(页面)的分裂,从而提高系统性能。

      有如下的SQL FILLFACTOR例句:

      CREATE INDEX index1 ON TABLE table_name(col1) in idxldbs FILLFACTOR 70;       

      建立索引的步骤

      建立索引必须遵循如下步骤:

        确定需要建立的索引      

        决定索引的类型,分离索引还是分片索引。如果是分片索引,确定表达式      

        为每一索引确定填充因子            

        计算索引所需空间      

        决定索引数据空间在磁盘上的位置   

        为索引创建数据空间            

        决定所需临时数据空间大小和位置。临时数据空间最好能分布存储。            

        利用DBSPACETEMP 设置临时数据空间的大小,利用onspace命令的-t选项创建临时数据空间设置环境变量PDQPRIORITY 和PSORT_NPROCS创建相应的配置文件。其中各选项的最优设置参见并行排序和载入环境配置参数 建立索引时参数的优化设置与载入环境中的设置相同。此作一简单回顾:

      NUMCPUVPS       设置为CPU数目

      BUFFERS        设置尽量多的缓冲区。初始时应为缓冲区分配最多至25%的内存。

      SHMVIRTSIZE      赋予初始段最大值。最多至可用内存的75% 

      CKPTINTVL       3000。由物理日志决定何时生成检查点。

      LRUS          一个LRU队列对含500-700个缓冲并允许LRU队列对最大至128

      LUR_MAX_DIRTY     设置为80

      LUR_MIN_dirty     设置为70   

      RA_PAGES        设置为128,

      RA_THRESHOLD      设置为120

      DBSPACETEMP      设置多个大小相同的临时数据空间分布在不同的设备上

      DS_TOTAL_MEMORY     90%*SHMVIRTSIZE

      DS_MAX_SCANS      待建索引表的最大分片数

      下面是对环境变量的简单回顾:

      PSORT_NPROCS      设置为CPU数目,最大至10

      PDQPRIORITY       设置为100

      数据聚集

      如果经常根据索引从表中读取大量的数据,那么最好对这些数据建立聚集。通过建立聚集可以减少读取页的数量,缩短检索时间,并可以充分利用预读功能顺序扫描数据。

      数据的聚集通过创建聚集索引(clustered index)完成。利用ALTER INDEX ...TO CLUSTER 语句可以将原有索引改为聚集索引,原有索引中的数据记录顺序将作重排。如果直接创建聚集索引,系统也会将数据记录排序。请注意,在ATLTER 

        INDEX ...TO CLUSTER 和CREATE CLUSTER INDEX 语句执行后,系统将建立新表并删除旧表。所以必须有足够的空间来容纳新旧两张表。

      如果可能,在载入数据前先对其按索引顺序排序,这样建立索引时不必设置CLUSTER子句,从而不必对数据进行聚集操作,避免建新表删旧表过程的开销 

分享到:
评论

相关推荐

    Informix数据库表空间等创建、连接

    在Informix数据库中,表空间(tablespace)是一种逻辑存储区域,用于存放表、索引等数据库对象。每个表空间由一个或多个物理文件组成,这些文件可以分布在不同的磁盘上,以便于提高I/O性能和磁盘空间利用率。 #### ...

    informix学习使用手册

    书中将涵盖关系模型、实体关系图(ER图)的绘制,以及如何根据业务需求创建表、索引和约束。读者将学习如何通过规范化理论优化数据库设计,减少数据冗余和提高数据一致性。 五、Informix性能优化 Informix提供了...

    Informix11.5认证教程

    《Informix 11.5 认证教程》是一份全面深入的学习资料,旨在帮助用户掌握 Informix 数据库系统的安装、调试与管理等关键技能,从而顺利通过 Informix 11.5 的专业认证考试。Informix 是 IBM 公司推出的一款高性能、...

    informix数据库完整教程

    1. Hot Backup:Informix的热备份功能可以在不中断服务的情况下创建数据库备份,确保业务连续性。 2. Shadow Tables:通过镜像表(Shadow Tables),Informix可以实现故障切换,当主表出现问题时,系统自动切换到...

    informix 12.1官方指南(中文)

    4. **数据类型与模式**:介绍Informix支持的各种数据类型,以及如何创建和管理数据库模式,包括表、视图、索引等,帮助用户构建高效的数据结构。 5. **事务处理与并发控制**:讲解Informix的事务管理机制,包括ACID...

    informix sql性能分析

    在某些情况下,数据库会自动创建临时索引来加速查询过程。这种扫描方式通常适用于那些频繁进行简单查询的应用程序,因为自动索引可以减少查询时间,尽管可能会增加维护成本。 #### 四、连接策略分析 在多表查询中...

    Informix原理及管理技术

    6. **性能优化**:通过调整表分区、索引创建、查询优化器设置等方式,可以有效地提升Informix数据库的性能。了解执行计划和SQL调优技巧是管理员必备技能。 7. **安全性与权限管理**:Informix提供用户、角色和权限...

    Informix数据库常用命令介绍

    5. **dbschema**: `dbschema` 命令用于生成创建数据库结构的 SQL 语句,包括表、索引、视图等。这在重建数据库或分析现有架构时很有帮助。 6. **oncheck**: 用于检查数据库的完整性,发现并修复可能的问题。`...

    Informix12.1 -201406-官方训练营的培训资料

    文件深入讲解了Informix中的索引类型(如B树、位图索引等)及其作用,如何创建和优化索引以提升查询性能,以及索引对写操作的影响。这对于数据库性能调优至关重要。 3. **Informix SQL性能优化实战** (2.2_...

    informix精华文字版

    3. **表和索引**:创建、修改和优化表结构,理解不同类型的索引(如B树、位图索引、R树等)及其对查询性能的影响,是提升数据库性能的关键。 4. **存储过程和触发器**:Informix 支持用户自定义函数(UDF)和存储...

    informix

    3. **数据库创建与管理**:掌握创建、删除和管理数据库的技巧,包括表空间、表、索引的创建和优化,以及数据库备份和恢复策略。 4. **性能监控与调优**:理解Informix的性能指标,如查询执行计划、缓冲区管理和锁...

    Informix_Quick_Start_ Guide_v1210_informix_Quick_

    Informix提供了丰富的数据类型和索引策略,可以根据业务需求进行灵活设计,以优化查询性能。 接下来,指南会讲解如何使用SQL(结构化查询语言)与Informix交互。SQL是数据库管理的标准语言,通过学习如何编写SELECT...

    Informix数据库教程

    1. 索引设计:合理创建索引可以显著提升查询效率,理解B树索引、散列索引和R树索引的原理和适用场景至关重要。 2. 查询优化:利用EXPLAIN分析查询计划,优化JOIN操作和子查询,避免全表扫描。 3. 内存调优:调整缓冲...

    INFORMIX数据库学习资料

    这个指南可能涵盖了关系模型、范式理论、索引创建和表分区等主题,帮助读者创建高效、易维护的数据库结构。 10. **IBM Informix SQL教程指南**: 作为初学者的教程,此文档可能以易于理解的方式介绍Informix SQL的...

    informix中文培训文档

    在 Informix 中,SQL 用于创建数据库、表,插入、更新和删除数据,以及查询和检索信息。培训文档会讲解基本的 SELECT 语句、JOIN 操作、子查询、聚合函数和视图等概念。 2. **数据库管理**: 包括数据库的创建、...

    informix SQL语法手册

    - **创建索引**: - CREATE INDEX语句:提高查询性能。 - `CREATE INDEX index_name ON table_name (column_name);` - **视图**: - 创建视图:存储预定义查询结果的虚拟表。 - `CREATE VIEW view_name AS ...

    informix入门指南v9.4

    3. **SQL基础**:Informix支持标准的SQL语言,学习如何创建数据库、表,插入、查询、更新和删除数据,以及使用视图、索引、存储过程等高级特性。 4. **事务处理**:理解事务的概念,事务的ACID属性(原子性、一致性...

    Informix SQL 语句详解

    Informix SQL 语句是一种功能强大且灵活的数据库管理语言,用于创建、管理和维护 Informix 数据库。下面是 Informix SQL 语句详解的知识点总结: 一、创建数据库 CREATE DATABASE 语句用于创建一个新的 Informix ...

Global site tag (gtag.js) - Google Analytics