zoukankan      html  css  js  c++  java
  • Oracle基础 索引

    一、索引

      索引是一种快速访问数据的途径,可提高数据库性能。索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据,就像书的目录,可以快速查找所需的信息,无须阅读整本书。

      (一)索引的分类

      逻辑分类:单列索引、组合索引、唯一索引、非唯一索引,函数索引。

      物理分类:区分索引、非分区索引、B树索引、正向索引、反向索引,位图索引。

      

      (二)索引的缺点:

        1、索引占用表空间,创建太多索引可能会造成索引冗余。

        2、索引会影响INSERT、UPDATE、DELETE语句的性能。

      

      (三)使用索引的原则:    

        1、装载数据后再建立索引。

        2、频繁搜索的列可以作为索引。

        3、在联接属性上建立索引(主外键)。

        4、经常排序分组的列。

        5、删除不经常使用的索引。

        6、指定索引块的参数,如果将来会在表上执行大量的insert操作,建立索引时设定较大的ptcfree。

        7、指定索引所在的表空间,将表和索引放在不同的表空间上可以提高性能。

        8、对大型索引,考试使用NOLOGGING子句创建大型索引。

        不要在下面的列创建索引:   

        1、仅包含几个不同值得列。

        2、表中仅包含几条记录。

        

    二、索引的使用:

      (一)创建索引

      语法:

      CREATE [UNIQUE] INDEX index_name ON table_name(column_list)

      [TABLESPACE tablespace_name]

      说明:  

      unique:指定索引列中值必须是唯一的
      index_name:索引名
      table_name:指定要建立索引的表
      col_name:要建立索引的列,可以是多列,那样的索引叫多列索引
      table_space_name:索引存储的表空间

      实例1:

    如果我们经常对emp表进行按照empno来查询某个员工的信息,
    SQL> select * from emp where empno=7788;
    
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
    我们就应该对empno这一列建一个索引。
    create index indx_on_empno 
    on emp(empno) 
    tablespace users;

      实例2:

    如果我们经常查询某个部门工资大于1000的员工信息,
    那么我们就可以在job和sal列上建立所以,这叫组合索引:
    SQL> select * from emp
      2  where job='SALESMAN' and sal>1000;
    
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
    
    create index indx_on_job_sal 
    on emp(job,sal)
    tablespace users;

      实例3:

    我们还可以创建基于函数的索引,不过在此前,我们必须设置一下初始化参数:
    conn system/chage_on_install as sysdba;
    alter system set query_rewrite_enabled=true;
    
    create index indx_lower_job
    on emp(lower(job))
    tablespace users;

      (二)修改索引

    就像修改表一样,我们在创建索引后可以进行修改
    实例1:分配和释放索引空间
    alter index indx_on_empno
    allocate extent(size 1m);
    
    实例2:释放多余的索引空间
    alter index indx_on_empno
    deallocate unused;
    
    实例3:重建索引
    alter index indx_on_job_sal rebuild;
    
    实例4:联机重建索引,
    使用rebuild,若其他用户正在表上执行dml操作,重建会失败,
    使用如下语句,就可以成功重建
    alter index indx_on_job_sal rebuild online;
    
    实例5:合并索引
    当相邻索引块存在剩余空间,通过合并索引将其合并到一个索引块上
    alter index indx_on_job_sal coalesce;
    
    实例6:重命名索引
    alter index indx_on_job_sal rename to indx_on_jobandsal;

      (三)删除索引

    如果索引不再需要了,留在数据库中将会占用资源,我们可以将其删除
    drop index indx_on_job_sal;

      (四)查看索引

    我们可以从unser_indexes视图中查看有关某表的索引信息,
    下面我先来看看unser_indexes视图的信息:
    SQL> desc user_indexes;
  • 相关阅读:
    Collections集合工具类排序
    集合的学习
    gitee使用方法
    vue 首屏优化
    vue 配置多个路由别名
    vue中的状态管理Vuex
    【Python】Pandas合并表格之(append, join , concat方法)
    elementui中提交表单自动刷新页面的问题
    滴滴实习面试题
    CSS 日常积累
  • 原文地址:https://www.cnblogs.com/zhengcheng/p/4227188.html
Copyright © 2011-2022 走看看