zoukankan      html  css  js  c++  java
  • Oracle索引技术之如何建立最佳索引

    怎样建立最佳索引?

    1、明确地创建索引

    create index index_name on table_name(field_name)

    tablespace tablespace_name

    pctfree 5

    initrans 2

    maxtrans 255

    storage

    (

    minextents 1

    maxextents 16382

    pctincrease 0

    );

    2、创建基于函数的索引

    常用与UPPER、LOWER、TO_CHAR(date)等函数分类上,例:

    create index idx_func on emp(UPPER(ename)) tablespace tablespace_name;

    3、创建位图索引

    对基数较小,且基数相对稳定的列建立索引时,首先应该考虑位图索引,例:

    create bitmap index idx_bitm on class (classno) tablespace tablespace_name;

    4、明确地创建唯一索引

    可以用create unique index语句来创建唯一索引,例:

    create unique index dept_unique_idx on dept(dept_no) tablespace idx_1;

    5、创建与约束相关的索引

    可以用using index字句,为与unique和primary key约束相关的索引,例:

    alter table table_name

    add constraint PK_primary_keyname primary key(field_name)

    using index tablespace tablespace_name;

    如何创建局部区索引?

    1)基础表必须是分区表

    2)分区数量与基础表相同

    3)每个索引分区的子分区数量与相应的基础表分区相同

    4)基础表的自分区中的行的索引项,被存储在该索引的相应的自分区中,例如

    create index TG_CDR04_SERV_ID_IDX on TG_CDR04(SERV_ID)

    Pctfree 5

    Tablespace TBS_AK01_IDX

    Storage(

    MaxExtents 32768

    PctIncrease 0

    FreeLists 1

    FreeList Groups 1

    )

    local

    /

    如何创建范围分区的全局索引?

    基础表可以是全局表和分区表

    create index idx_start_date on tg_cdr01(start_date)

    global partition by range(start_date)

    (partition p01_idx vlaues less than ('0106')

    partition p01_idx vlaues less than ('0111')

    ...

    partition p01_idx vlaues less than ('0401'))

    /

    如何重建现存的索引?

    重建现存的索引的当前时刻不会影响查询

    重建索引可以删除额外的数据块

    提高索引查询效率

    alter index idx_name rebuild nologging;

    对于分区索引

    alter index idx_name rebuild partition partition_name nologging;

    删除索引的原因?

    1)不再需要的索引

    2)索引没有针对其相关的表所发布的查询提供所期望的性能改善

    3)应用没有用该索引来查询数据

    4)该索引无效,必须在重建之前删除该索引

    5)该索引已经变的太碎了,必须在重建之前删除该索引

    语句:

    drop index idx_name;

    drop index idx_name partition partition_name;

    建立索引的代价?

    基础表维护时,系统要同时维护索引,不合理的索引将严重影响系统资源,

    主要表现在CPU和I/O上。

    插入、更新、删除数据产生大量db file sequential read锁等待。

  • 相关阅读:
    遍历datatable的方法
    C# 存储过程使用方法
    C# 存储过程
    dev repositoryItem 手工定义
    无限极分类
    ThinkPHP
    ThinkPHP
    RBAC
    ThinkPHP
    正则表达式
  • 原文地址:https://www.cnblogs.com/haquanwen/p/3812608.html
Copyright © 2011-2022 走看看