• Oracle索引


    索引是什么?

        索引是与表关联的可选结构,是一种快速访问数据的途径,可提高数据库性能。

        数据库可以明确地创建索引,以加快对表执行SQL语句的速度。

        当索引键作为查询条件时,该索引将直接指向包含这些值得行的位置。即便删除索引,也无需修改任何SQL语句的定义。

    关于索引的一些原则

         创建索引需要遵循的一些原则:

            1) 频繁搜索的列可以作为索引。

            2) 经常排序、分组的列可作为索引。

            3) 经常用作连接的列(主键/外键)可作为索引。

            4) 将索引放在一个单独的表空间中,不要放在有回退段、临时段和表的表空间中。

            5) 对大型索引而言,考虑使用nologging字句创建大型索引。

            6) 根据业务数据发生的频率,定期重新生成或重新组织索引,并进行碎片整理。

            7) 仅包含几个不同值的列不可以创建为B数索引,可根据需要创建位图索引。

            8) 不要在仅包含几行的表中创建索引。

        删除索引需要遵循的一些原则:

            1) 应用程序不再需要索引。

            2) 执行批量添加前。大量添加数据前删除索引,可以调添加速度和更搞笑的使用索引空间。

            3) 索引已损坏。

        重建索引需要遵循的一些原则:

            1) 用户表被移动到新的表空间后,表上的索引不会自动转义,此时需要将索引移动到指定表空间。

            2) 索引中包含很多已删除的向。对表进行频繁删除,造成索引空间浪费,可以重建索引。

            3) 需将现有的正常索引转换成反向键索引。

    B树索引

         B树索引也称为标准索引。索引的顶部为根,其中包含指向索引中下一级的项。下一级为分支块,分支块又指向索引中下一级的块。最低一级为叶节点,

        其中包含指向表行的索引项。叶块为双向链接,有助于按关键字值的升序和降序扫描索引。

    唯一索引和非唯一索引

         唯一索引:

            定义索引的列中任何两行都没有重复值。唯一索引中的索引关键字只能指向表中的一行。在创建主键约束和创建唯一约束时都会创建一个与之对

            应的唯一索引。

        非唯一索引:

            单个关键字可以有多个与其关联的行。

    反向键索引

         与常规B树索引相反,反向键索引在保持列顺序的同事反转索引列的字节。反向键索引通过反转索引键的数据值来实现。其优点是对于连续增长的索引列,

        反转索引列可以将索引数据分散在多个索引块间,减少I/O瓶颈的发生。

        反向键索引通常建立在一些值连续增长的列上,如系统生成的员工编号,但不能执行范围搜索。

    位图索引

        位图索引的有点在于,它最适用于低基数列(即该列的值是有限的,理论上不会是无穷大)。

        位图索引具有下列有点。

            1.对于大批即时查询,可以减少相应时间。

            2.相比其他索引计数,占用空间明显减少。

            3.即使在配置很低的终端硬件上,也能获得显著的性能。

        位图索引不应当用在频繁发生insert、update、delete操作的表上。这些DML操作在性能方面的代价很高。位图索引最适合用于数据仓库和决策支持系统。

    组合索引

         在表内多列上创建。索引中的列不必与表中的列顺序一致,也不必相互邻接,类似于SQL server中的复合索引。

        组合索引最多包含32列。

    基于函数的索引

         若使用的函数或表达式涉及正在建立索引的表中的一列或多列,则创建基于函数的索引。可以将基于函数的索引创建为B树索引或位图索引。


    关于索引的一些例子

    /*
    ===========================================================
    | 在薪水级别(salgrade)表中,为级别编号(grade)列创建唯一索引
    ============================================================
    */

    CREATE UNIQUE INDEX index_unique_grade ON salgrade(grade);

    /*
    ===========================================================
    | 在员工(employee)表中,为员工编号(empno)列创建反向键索引
    ============================================================
    */
    CREATE INDEX index_reverse_empno ON employee(empno) REVERSE;
    /*
    ===========================================================
    | 在员工(employee)表中,为工种(job)列创建位图索引
    ============================================================
    */

    CREATE BITMAP INDEX index_bit_job ON employee(job);
    /*
    ===========================================================
    | 在员工(employee)表中,为员工名称(ename)列创建大写函数索引
    ============================================================
    */
    CREATE INDEX index_ename ON employee(UPPER(ename));

    /*
    ===========================================================
    | 主键列创建反向键索引
    ============================================================
    */
    CREATE UNIQUE INDEX idx_empno ON employee(empno) REVERSE;

    --删除索引
    DROP INDEX index_bit_job;

    --将反向键索引更改为正常B树索引
    ALTER INDEX index_reverse_empno REBUILD NOREVERSE;

    --将索引移到指定表空间
    ALTER INDEX index_name REBUILD TABLESPACE tablespace_name;

    --创建B树索引
    CREATE INDEX idx_emp_department
    ON employee(deptno);

    --创建位图索引
    CREATE BITMAP INDEX idx_emp_job
    ON employee(job);

    --创建组合索引
    CREATE INDEX idx_emp_name
    ON employee(last_name,first_name);

    -- 主键列创建反向键索引
    CREATE UNIQUE INDEX idx_empno ON employee(empno) REVERSE;

  • 相关阅读:
    将图片插入到excel中
    C#如何实现下载文件保存到本地上面去
    jQuery实现按enter键登录
    线程(转载)
    SQL Server:触发器详解
    C# 创建Windows服务
    小记
    mysql的部署和使用
    Maven的理解和使用
    tomcat的部署与实践
  • 原文地址:https://www.cnblogs.com/gaofei-1/p/7450272.html
Copyright © 2020-2023  润新知