zoukankan      html  css  js  c++  java
  • 索引B+Tree

    外连接 彩虹的你

    索引类型

     1.索引的作用是提高数据库的查询效率

      索引原理
      1. 若没有索引,搜索某个记录时(例如查找name='wish')需要搜索所有的记录,因为不能保证只有一个wish,必须全部搜索一遍

      2. 若在name上建立索引,oracle会对全表进行一次搜索,将每条记录的name值升序排列,然后构建索引条目(name和rowid),存储到索引段中,查询name为wish时即可直接查找对应地方

      3.创建了索引并不一定就会使用,oracle自动统计表的信息后,决定是否使用索引,表中数据很少时使用全表扫描速度已经很快,没有必要使用索引

    2.如何创建索引?

      CREATE [UNIQUE] | [BITMAP] INDEX index_name --unique表示唯一索引 --bitmap,创建位图索引
      ON table_name([column1 [ASC|DESC],column2
      [ASC|DESC],…] | [express]) [TABLESPACE tablespace_name]
      [PCTFREE n1] --指定索引在数据块中空闲空间
      [STORAGE (INITIAL n2)]
      [NOLOGGING] --表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
      [NOLINE]
      [NOSORT]; --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用

    3.如何查看当前表是否创建索引?

    4.索引类型(BTtree 索引 位图索引)

      1. B树索引(默认索引,保存讲过排序过的索引列和对应的rowid值)

        1)说明:

          1.oracle中最常用的索引;B树索引就是一颗二叉树;叶子节点(双向链表)包含索引列和指向表中每个匹配行的ROWID值

          2.所有叶子节点具有相同的深度,因而不管查询条件怎样,查询速度基本相同

          3.能够适应精确查询、模糊查询和比较查询

        2)分类:

           UNIQUE,NON-UNIQUE(默认),REVERSE KEY(数据列中的数据是反向存储的)

        3)创建例子

          craete index index_sno on student('sno');

        4)适合使用场景:

          列基数(列不重复值的个数)大时适合使用B数索引

      2. 位图索引

        1)说明:

          1.创建位图索引时,oracle会扫描整张表,并为索引列的每个取值建立一个位图(位图中,对表中每一行使用一位(bit,0或者1)来标识该行是否包含该位图的索引列的取值,如果为1,表示对应的rowid所在的记录包含该位图索引列值),最后通过位图索引中      的映射函数完成位到行的ROWID的转换

        2)创建例子

          create bitmap index index_sno on student(sno);
        3) 适合场景:

          对于基数小的列适合简历位图索引(例如性别等)

      3.单列索引和复合索引(基于多个列创建)

        1) 注意:

          即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引,即至少要包含组合索引的第一列

      4. 函数索引

        1)说明:

          1. 当经常要访问一些函数或者表达式时,可以将其存储在索引中,这样下次访问时,该值已经计算出来了,可以加快查询速度

          2. 函数索引既可以使用B数索引,也可以使用位图索引;当函数结果不确定时采用B树索引,结果是固定的某几个值时使用位图索引

          3. 函数索引中可以水泥用len、trim、substr、upper(每行返回独立结果),不能使用如sum、max、min、avg等

     

    normal:表示普通索引

    unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

    full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。

    总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。

    PRIMARY, INDEX, UNIQUE 这3种是一类
    PRIMARY 主键。 就是 唯一 且 不能为空。
    INDEX 索引,普通的
    UNIQUE 唯一索引。 不允许有重复。
    FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。

    在实际操作过程中,应该选取表中哪些字段作为索引?

    1.选择唯一性索引
    2.为经常需要排序、分组和联合操作的字段建立索引
    3.为常作为查询条件的字段建立索引
    4.限制索引的数目
    5.尽量使用数据量少的索引
    6.尽量使用前缀来索引
    7.删除不再使用或者很少使用的索引

  • 相关阅读:
    【转】UTF8文件的Unicode签名BOM(Byte Order Mark)问题
    【转】java使用正则表达式去除字符串的html标签
    用UltraEdit转换大小写
    【转】浅谈字节序(Endianness)
    【转】用UltraEdit的正则表达式替换功能来格式化网页源代码
    【转】关于正则表达式匹配任意字符(包括换行符)的写法
    【转】C# 中的 #region 和 #endregion
    网易游戏开发工程师笔试题
    c++笔试题汇总
    恒生电子面试过程纪录
  • 原文地址:https://www.cnblogs.com/nextgg/p/15402169.html
Copyright © 2011-2022 走看看