惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - 老公鸡

sharepoint 2010? Jsp中使用数据库连接池. MVC2 学习之 UrlRouting Oracle基础学习之函数 Oracle 基本操作之sql语句 Oracle基本操作 Oracle 数据库学习一 小黑日记三 结束了 mvc 3 学习 第一天 准备 小黑 成长日记第二天 2011年6月15日,同事捡了一只小猫回来了 NHibernate 学习 第十二天 存储过程的使用 NHibernate 学习 第十一天 对多对的关系处理 NHibernate 学习 第十天 一对多的外键关系处理 NHibernate 学习 第九天 外键关系的处理之一对一 NHibernate学习 第八天 组件的运用 NHibernate学习 第七天 其它的学习资料 NHibernate学习 第六天 NHibernate 中的查询 NHibernate 学习第五天 用户表的增,删,改,查
Oracle 基础学习之索引
老公鸡 · 2011-06-23 · via 博客园 - 老公鸡

一. 按存储结构分

    a. b树索引   默认索引

         即二叉搜索树:

               1.所有非叶子结点至多拥有两个儿子(Left和Right)

           2.所有结点存储一个关键字

               3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;

               如:

             B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;

            否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入

            右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;

                 如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树

            的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构

             (插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;

               如:

            但B树在经过多次插入与删除后,有可能导致不同的结构:

               右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的

            树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结构,和避免右图的结构,也就

            是所谓的“平衡”问题;      

                   实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树

            结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的策略;

    b. 位图索引

        如有表 test(id,name,address)
        数据
            (1,张三,大连)
            (2,李四,天津)
            (3,王五,北京)
            (4,赵六,大连)
            ....

            类似这样的数据,如果查询的时候用到 【where address='大连'】,因为数据库中有很多这样的数据,所以一般的索引起不到查询加速的作用,而建立位图索引后会产生如下位图效果:
            假设有4条数据(就如上所示)

            大连 天津  北京
            1    0     0
            0    1     0
            0    0     1
            1    0     0

            这样当查询:
                select * from 表 where address='大连' or address='北京';
            的时候数据库很快就能根据 同行的 1和0 判断出那一条数据符合要求。

            在实际应用中,如果某个字段的值需要频繁更新,那么就不适合在它上面创建位图索引。

            在位图索引中,如果你更新或插入其中一条数值为N的记录,

               那么相应表中数值为N的记录(可能成百上千条)全部被Oracle锁定,

               这就意味着其它用户不能同时更新这些数值为N的记录,其它用户必须要等第一个用户提交后,

               才能获得锁,更新或插入数据,bitmap index它主要用于决策支持系统或静态数据。

    c. 反向键索引

        我们知道Oracle会自动为表的主键列建立索引,这个默认的索引是普通的B-Tree索引。对于主键值是按顺序(递增或递减)加入的情况,默认的B- Tree索引并不理想。这是因为如果索引列的值具有严格顺序时,随着数据行的插入,索引树的层级增长很快。搜索索引发生的I/O读写次数和索引树的层级数成正比,也就是说,一棵具有5个层级的B-Tree索引,在最终读取到索引数据时最多可能发生多达5次I/O操作。因而,减少索引的层级数是索引性能调整的一个重要方法。

如果索引列的数据以严格的有序的方式插入,那么B-Tree索引树将变成一棵不对称的"歪树",

而如果索引列的数据以随机值的方式插入,我们将得到一棵趋向对称的索引树,

对称的B-Tree索引

搜索到A块需要进行5次I/O操作,而图 6仅需要3次I/O操作。

既然索引列数据从序列中获取,其有序性无法规避,但在建立索引时,Oracle允许对索引列的值进行反向,即预先对列值进行比特位的反向,如 1000,10001,10011,10111,1100经过反向后的值将是0001,1001,1101,0011。显然经过位反向处理的有序数据变得比较随机了,这样所得到的索引树就比较对称,从而提高表的查询性能。

但反向键索引也有它局限性:如果在WHERE语句中,需要对索引列的值进行范围性的搜索,如BETWEEN、<、>等,其反向键索引无法使用,此时,Oracle将执行全表扫描;只有对反向键索引列进行 <> 和 = 的比较操作时,其反向键索引才会得到使用。

二. 按索引值分

    a. 唯一索引

        列上的值是唯一的,主键为唯一索引

    b. 非唯一索引

        在列上的值可以为null

三. 其它索引

    a. 单列索引

        一个列建索引

    b. 组合索引

        多个列一起建索引

    c. 基于函数索引

         使用函数里面的表达式来索引

  能用唯一索引,一定用唯一索引

  能加非空,就加非空约束

  一定要统计表的信息,索引的信息,柱状图的信息。

  联合索引的顺序不同,影响索引的选择,尽量将值少的放在前面

  只有做到以上四点,数据库才会正确的选择执行计划。

四: 创建语法

    create unique|bitmap index 索引名称

    on 表名

    (列1 asc|desc ,列2.。。。)

    reverse

    reverse 为反向键索引,unique唯一和bitmap位置不写为b树索引