精华内容
下载资源
问答
  • 创建位图索引

    万次阅读 2017-05-28 10:00:54
    创建位图索引 位图索引 1位图索引与B树索引不同,位图索引不存储rowid值(数据实际物理地址),也不存储键值。...4基数很低的列不适合B树索引,适合位图索引oracle建议,当一个列的所有取值数量与该列的行数比小于1

    创建位图索引
    位图索引
    1位图索引与B树索引不同,位图索引不存储rowid值(数据实际物理地址),也不存储键值。
    2在特殊的列上创建位图 索引.

    3特殊的列是指该列的基数很低的列(基数:列值的数量比列的行数来的小)。
    举例:性别列的取值只有2个(男女),但是性别列的行数远远大于该列的取值。

    4基数很低的列不适合B树索引,适合位图索引,oracle建议,当一个列的所有取值数量与该列的行数比小于1%时,该列不适合建立B树索引,适合位图索引。

    5在表中放置单独的位图索引是没有意义的,只有多个列建立位图索引,系统才能有效的利用位图索引提高查询速度.

    6因为位图索引不能是唯一索引,也不能对其进行键压缩

    7位图索引的作用源于与其他位图索引的结合,当位图索引的多个列进行查询时,oracle对这些上的位图索引进行布尔and和or运行,最终返回结果.

    性别列位图索引以及对应的表行概念示意图
    这里写图片描述
    具体实现
    1 oracle对employee进行全表扫描
    2创建位图索引,并构建一个表(右边)
    3右边表的数据与左边表性别列数据一一对应,(数值1代表存在,0代表不存在)
    4如果给定右表起始物理地址和终止物理地址,那么对应左表性别列上的值的实际物理地址还是可以取到的。

    性别列B树索引结构图
    这里写图片描述
    (性别列不适合建立B数索引)

    创建位图索引
    /位图索引/
    create bitmap index ssex_bitmap_index on zhou.student(ssex)
    tablespace MYSPACE;
    这里写图片描述

    注意:
    1在表中放置单独的位图索引是没有意义的,只有多个列建立位图索引,系统才能有效的利用位图索引提高查询速度.
    2因为位图索引不能是唯一索引,也不能对其进行键压缩
    3位图索引的作用源于与其他位图索引的结合,当位图索引的多个列进行查询时,oracle对这些上的位图索引进行布尔and和or运行,最终返回结果.

    展开全文
  • Oracle关于位图索引创建与应用

    千次阅读 2018-03-18 13:05:01
    Oracle关于位图索引创建与应用 标签: Oracle 位图索引 2016年03月13日 10:55:383730人阅读 评论(0) 收藏 举报  分类: 数据库(10) oracle(12)  1)创建  CREATE ...
     

    Oracle关于位图索引的创建与应用

    标签: Oracle 位图索引
    3730人阅读  评论(0)  收藏  举报
      分类:
     
    1)创建

      CREATE BITMAP INDEX index_name ON normal_index_creation_clause;

      Oracle创建一系列的位图,每个位图都与一个特殊的值有关。例如,如果在某一个字段上创建一个位图索引,这个字段上的值有2种,1个是'East'1个是'Central',那没就建立有2个位图,1个用于'East'1个用于'Central'。


      如果索引建立于多个字段上,那么每种可能的组合都必须有一个位图。


      2)位图索引结构

      一个规则的B*tree索引是根据ROWID作为行的关键值来成对,再将这些对整理放置到B*tree结构中。ROWID作为一个指向一行的指针。位图索引有一个非常不一样的结构:ROWID并不直接存储:每个不同的值有一个它们自己的位图。(这就是为什么位图索引通常建立在独特值较少的列上)。


      位图的每个位置映射到一个可能的ROWID上,位图上每个位置的内容用于表示该行特定的值是否在位图列中。所以,位图的每个位置存储特殊行和相关ROWID的信息。如果该ROWID的行的值匹配,则该特殊rowid位置存储为"1",否则储存为"0"。Oracle也能够压缩位图存储。


      3)何时使用位图索引


      - 该字段具有较低的集的势:独特值较少


      - 位图索引在具有冗长WHERE条件的复杂查询或聚合查询(包含SUM,COUNT或其他聚合函数)中特别有帮助。


      - 表中有大量的行(100万行有1万个独特值可以接收使用位图索引)


      - 表上有频繁复杂查询


      - 数据库环境为数据仓库(DSS系统)。由于位图索引的加锁形式,所以它不大适合联机事务处理(OLTP)环境。不能单独锁定位图的其中一个位置。


      位图被锁定的最小数量为1个位图段,它可以达到半个数据块的大小。改变一行的值将会导致整个位图段被锁,同时锁住了其他的行。


      这对于用户如果有大量的UPDATE,INSERT,DELETE语句及其不利。但对于数据是批量导入或更新则没有问题,如在一个数据仓库系统中。


      - 位图连接索引是9i引入的一个新方法,可以避免在运行时的连接操作,因为在索引创建时位图索引已经基于了连接。


      BJI是一个在空间上减少选择数据量的有效方法。这些数据导致的连接操作和限制都永久地存储在BJI中。连接条件是一个相对的内部连接,维度表的主键和事实表的外键。


      4)限制条件


      -------------------


      - 位图索引在Trusted Oracle中不支持


      - 不能被规则优化器(RBO)使用


      - 不能用于分区表的全局索引


      - 位图索引不支持build或rebuild的ONLINE选项,在10.2中,只有位图连接索引不支持,普通位图索引可以指定ONLINE选项。


      - 对于有直接装载的位图索引,不提供SORTED_INDEX标记


      - 位图索引不能用于完整性检查


      - 位图索引不能定义为UNIQUE


      - 9i之前,不能在索引组织表上创建位图索引,9i开始支持在索引组织表上创建位图索引:在IOT上创建位图索引要求有一个映射表。


      - 不能给域索引指定BITMAP


      5)相对B*tree索引的优势


      -------------------------


      - 在大量复杂查询中节省响应时间


      - 对于常规的B*tree索引,有效地节省了空间使用


      a)在某一个字段上只有少量的独特值:


      如果在一个具有唯一性的字段上建立位图索引,那么它要求的空间大大超过B*tree索引。然而,对于每个值都重复了成百上千次,位图索引通常小于常规B*tree索引的25%。位图自身采用压缩格式存储。


      b)如果多个列被索引


      相对于多列(或连接)的B*tree索引,位图索引节约了相当可观的存储。在一个只有B*tree索引的数据库中,必须要预先评估在当个查询中可能访问到的列,然后在这些列上创建组合索引。


      这类索引不仅需要大量的空间,而且要求要有一定的顺序,如一个B*tree索引建立在(MARITAL_STATUS,REGION,GENDER)字段上,查询只访问REGION,GENDER时,索引是不起效果的。为了在数据库中充分地使用索引,必须在这些列上变换另一种排列顺序建立索引。举个简单例子,在一个较低的集的势的3个列中,那么可能就存在有6种位置关系不同的组合索引。需要在磁盘空间和性能之前权衡考虑创建何种位置顺序的索引。位图索引解决了这个进退两难问题。位图索引在查询执行过程中可以有效地组合,所以3个较小的单个字段的位图索引可以完成6种3个字段组合的B*tree索引的工作。


      - 非常高效的并行DML和装载


      位图索引在数据仓库应用中很有效率,但是不适合在OLTP应用系统中使用,因为有大量同时发生的INSERT,UPDATE,DELETE操作。索引直到每个DML操作完成之后才进行维护。例如,如果插入1000行数据,插入的行将放置在排序缓冲区中,然后更新批量更新所有的1000条索引条目。(这就是为什么SORT_AREA_SIZE需要设置为一个较优性能的值,用于位图索引的插入和更新)。所以,每个DML操作,位图段只更新一次,即使段中有多行变更时。


      - 行包含null值(见"位图索引和NULLs")


      6)使用小贴士


      ------------------


      - 在所有可能非空的字段上声明NOT NULL约束,可以减少存储需求,因为位图不会有NULL值。


      - 使用固定长度的数据格式可以减少存储需求。


      - 增大CREATE_BITMAP_AREA_SIZE初始化参数,可以加快查询处理


      该参数决定了分配给位图创建的内存大小,默认值为8MB。更大的值可以支持更大的连续位图,所以可以较快查询处理。


      - 增大BITMAP_MERGE_AREA_SIZE初始化参数可以加快索引的范围扫描。该参数决定了索引范围扫描时合并位图分配的内存大小。默认值为1MB。


      7)位图索引示例


      ------------------


      1个公司的客户数据


      CUSTOMER#   MARITAL_STATUS   REGION   GENDER  INCOME_LEVEL


      ---------   ---------------  -------- -------  ------------


      101        single           east     male    bracket_1


      102        married          central  female  bracket_4


      103        married          west     female  bracket_2


      104        divorced         west     male    bracket_4


      105        single           central  female  bracket_2


      106        married          central  female  bracket_3


      MARITAL_STATUS,REGION,GENDER,INCOME_LEVEL字段都是有较少的独特值(婚姻状况和地域只有三种值,性别只有2种值,收入级别只有4种值),较为适合在这些字段上创建位图索引。但在CUSTOMER#上不适合创建位图索引,因为该字段独特值较多。


      相反,在该字段上创建一个唯一的B*tree索引,将十分有效。


      本例中,REGION字段上的位图索引。


      由三个分开的位图组成,每个region一个。


      REGION='east'  REGION='central'  REGION='west'  ##       CUSTOMER#


      1              0                 0              <==       101


      0              1                 0              <==       102


      0              0                 1              <==       103


      0              0                 1              <==       104


      0              1                 0              <==       105


      0              1                 0              <==       106


      位图中的每个条目(或是说"bit")对应CUSTOMER表中的每一行。每个bit的值依赖于表中相应行的值。例如,REGION='east'的位图,它的第一个bit为1。这是因为CUSTOMER表的第一行,REGION='east'。REGION='east'的位图其他bit为0,是因为该表的其他行的REGION字段为其他值。


      一个分析员调查该公司客户的人口趋势,可能会问:"居住在中心区或西区的客户有多少是已婚的?",该问题就是下面这个查询SQL:


      SELECT COUNT(*) FROM CUSTOMER


      WHERE MARITAL_STATUS = 'married' AND REGION IN ('central','west');


      位图索引可以很高效地完成查询,因为只要计算位图中结果为1的数量,如图所示。最后要确认哪些客户符合要求,只要通过位图结果去访问表就可以了。


      status = 'married'     region = 'central'    region = 'west'


      0                          0                   0


      1                          1                   0


      1                          0                   1


      0                 AND(     0           OR      1       )


      0                          1                   0


      1                          1                   0


      0                           0              0


      1                           1              1    ==> 2nd row


      = 1                           1              1    ==> 3rd row


      0                 AND       1            = 0


      0                           1              0


      1                           1              1    ==> last row


      8)位图索引和NULLs


      ---------------------


      位图索引包含的行有NULL值,和其他类型的索引完全不相同。对null值索引有利于一些类型的SQL语句,如查询包含了聚合函数COUNT。


      例1:


      -------


      SELECT COUNT(*) FROM EMP;


      任何一个位图索引都可以用于该查询,因为表中所有行都被索引,包括那些NULL数据。如果null值未编入索引,优化器只有当,某个字段上有NOT NULL约束时,使用这个字段的索引。


      例2:


      -------


      SELECT COUNT(*) FROM EMP WHERE COMM IS NULL;


      该查询可以通过在COMM上建立一个位图索引来优化。


      例3:


      -------


      SELECT COUNT(*) FROM CUSTOMER WHERE GENDER = 'M' AND STATE != 'CA';


      该查询可以通过GENDER = 'M'的位图减去STATE = 'CA'的位图来得到结果。如果STATE字段包含NULL值(也就是说,该字段上没有NOT NULL约束),那么STATE = 'NULL'的位图也必须从该结果中减去。


      9)表和视图


      --------------------


      通过TYPE='BITMAP'条件,可以在USER_INDEXES,ALL_INDEXES,DBA_INDEXES视图中查询到位图索引的信息。


      10)执行计划上的标签


      ---------------------


      参看:


      Oracle8 Tuning Release 8.0


      Oracle8i Tuning Release 8.1.5


      Oracle9i Database Performance Tuning Guide and Reference Release 1 (9.0.1)


      Oracle9i Database Performance Tuning Guide and Reference Release 2 (9.2)


      Oracle Database Performance Tuning Guide and Reference 10gRelease 1 (10.1)


      Oracle Database Performance Tuning Guide and Reference 10gRelease 2 (10.2)


      Chapter Using EXPLAIN PLAN


      11)使用位图索引的HINT(7.3 - 8.0 - 8.1 - 9.0 - 9.2 - 10.1 - 10.2)


      -------------------------


      INDEX


      INDEX_COMBINE


      12)初始化参数


      -------------------------


      <Parameter:CREATE_BITMAP_AREA_SIZE>


      <Parameter:BITMAP_MERGE_AREA_SIZE>


      <Parameter:B_TREE_BITMAP_PLANS>


      <Parameter:V733_PLANS_ENABLED>


    转载地址:http://edu.cnzz.cn/201007/649422ac.shtml

    展开全文
  • Oracle创建索引、视图SQL语句

    千次阅读 2020-05-19 12:23:36
    一、索引 1、添加索引 create index 索引对象名 on 索引对应表名(表内索引对象字段名); 例:需创建包含userid属性的userinfo表。 create index userid on system.userinfo(userid); 2、删除索引 drop index 索引对象...

    一、索引

    1、添加索引
    create index 索引对象名 on 索引对应表名(表内索引对象字段名);
    例:需创建包含userid属性的userinfo表。
    create index userid on system.userinfo(userid);

    2、删除索引
    drop index 索引对象名;
    例:
    drop index userid;

    二、视图(并不是真实存在的一张表)

    1、创建视图
    create view 视图名(学号,姓名,科目,成绩) as
    select 对应在表格中的字段名
    from 涉及到的多张表名
    where 多张表通过id连接

    例:需创建学生信息表包含学生id和学生姓名,科目表包含科目id和科目名称,成绩表包括成绩id、学生id和科目id。
    create view system.info(学号,姓名,科目,成绩) as
    select userinfo.userid,userinfo.username,subject.subname,score.scnum
    from userinfo,subject,score
    where score.userid=userinfo.userid and score.subid=subject.subid;

    2、查看视图信息
    select * from 视图名;
    例:
    select * from system.info;

    ~注:基础增删改查SQL语句学习,可点击:SQL语句编写(增、删、改、查、序列)

    展开全文
  • Oracle 创建索引语法

    千次阅读 2018-05-08 23:06:32
    Oracle 的索引可分为5种,它们包括唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。1、创建索引的标准语法以下为引用内容:  CREATE INDEX 索引名 ON 表名 (列名)TABLESPACE 表空间名;例如:以下为引用...

    Oracle 的索引可分为5种,它们包括唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。

    1、创建索引的标准语法

    以下为引用内容: 
    CREATE INDEX 索引名 ON 表名 (列名)
    TABLESPACE 表空间名;

    例如:

    以下为引用内容: 
    CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;

    2、创建唯一索引

    以下为引用内容: 
    CREATE unique INDEX 索引名 ON 表名 (列名)
    TABLESPACE 表空间名;

    例如:

    以下为引用内容: 
    CREATE UNIQUE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;

    3、创建组合索引

    以下为引用内容: 
    CREATE INDEX 索引名 ON 表名 (列名1,列名2)
    TABLESPACE 表空间名;

    例如:

    以下为引用内容: 
    CREATE INDEX idx_of_imsi ON uim_auth_file(iccid,imsi) TABLESPACE users;

    4、创建反向键索引

    以下为引用内容: 
    CREATE INDEX 索引名 ON 表名 (列名) reverse
    TABLESPACE 表空间名;

    例如:

    以下为引用内容: 
    CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) reverse TABLESPACE users;
    
    
    
    

          5、oracle中查看某个表的索引是否有效

    select status,T.* from user_indexes T
    where table_name='TABLE1'
    
    
    

          6、查看表中哪个属性是索引

    select * from user_ind_columns where index_name = 'xxx'
    

    展开全文
  • Oracle B树索引和位图索引简介

    千次阅读 2019-01-23 17:43:47
    创建索引时它就是默认的索引类型。B 树索引可以是一个列的(简单)索引,也可以是多个列的(组合/复合)索引。B 树索引最多可以包括32 列。 在下图的例子中,B 树索引位于雇员表的 last_name 列上。这个索引的二元...
  • Oracle位图索引引发的阻塞与死锁

    千次阅读 2016-09-18 16:27:15
    前面我介绍了itl引发的阻塞与死锁,这里有必要再介绍一下位图索引引发的阻塞与死锁,因为这个也是不同于...假定,一个表,上面有标志字段(flags),分别是(0、1),而我们在这个flag字段上创建了一个位图索引,那么,现
  • 问题:btree和位图索引之间有什么区别? 我需要了解btree和位图索引之间的结构差异,然后了解在字段上使用b树与位图索引之间的区别。 答:在内部,位图和btree索引有很大的不同,但是在功能上它们是相同的,因为...
  • B树索引和位图索引 索引是数据库为了提高查询效率提供的一种冗余结构,保守计算数据库50%以上的调优可以通过调整索引来进行优化; 引用国内一位资深的ORACLE专家的话:"我其实只懂点(挨踢)知识,IT里面其实只懂...
  • oracle 位图索引

    2019-01-16 13:34:00
    主要针对大量相同值的列而创建,比如(性别、婚配等字段可选值很少的字段创建位图索引); 位图索引非常适合于决策支持系统(Decision Support System,DSS)和数据仓库,它们不应该用于通过事务处理应用程序访问的表...
  • 详解oracle bitmap位图索引

    万次阅读 2013-11-24 21:14:08
    位图索引oracle中非常重要的一种索引形式。本文通过总结有关位图索引的资料,尝试回答如下几个问题: 1:什么是位图索引? 2:位图索引适合什么场景,不适合什么场景? 3:位图索引的性能如何? 什么是...
  • 一. 视图 1.1 什么是视图       视图是一种数据库对象,是从一个或者多个数据表或视图中导出...根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合, &n
  • Oracle索引建立原则  · 确定针对该表的操作是大量的查询操作还是大量的增删改操作。  · 尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。  · where语句中...
  • 位图索引简介 Bitmap 索引适用于键值大量重复的列的查询。 Bitmap 索引对索引列的每一个键值分别索引。对于一个键值,可能分成一到多个范围进行存储。 每个键值的存储范围大致包括以下几个部分。首先是索引的...
  • ORACLE创建索引

    千次阅读 2017-11-24 11:54:00
    oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引   创建索引的标准语法:   CREATE INDEX 索引名 ON 表名 (列名)     TABLESPACE 表空间名;...
  • Oracle索引创建和使用

    万次阅读 2016-09-07 13:38:39
    OLTP系统索引创建 创建索引的作用 1、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2、可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 3、可以加速表和表之间的连接,特别是在实现...
  • oracle创建索引 查看索引状态

    千次阅读 2017-09-06 10:08:00
    Oracle对象教程:索引(Index)创建使用,索引:对数据库表中的某些列进行排序,便于提高查询效率。 当我们在某本书中查找特定的章节内容时,可以先从书的目录着手,找到该章节所在的页码,然后快速的定位到该页。这种...
  • 位图索引 同样的,先说是什么,再说为什么。 上篇我们说过BTREE索引是将数据表的索引列和行号排序后以树状形式存在磁盘中。那位图索引是什么样的呢? 现有如下日志表,有操作类型字段op_type,该字段的取值只有...
  • Oracle索引之Btree索引

    2019-03-31 11:21:05
    Oracle中常见有BTREE索引,位图索引和函数索引。 我们今天就先介绍一下这个BTREE索引吧。既然叫BTREE索引,那就从它的树结构说起: 建BTREE索引其实是先拿出所有数据排序,将有序的索引列的值和rowid存进Oracle的...
  • oracle 添加索引

    万次阅读 2017-10-25 13:53:35
    1.说明  1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在... 3)索引在逻辑上和物理上都与相关的表和数据无关,当创建
  • Oracle分区表及分区索引创建

    万次阅读 多人点赞 2018-07-08 11:21:22
    关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类:• Range(范围)分区• Hash(哈希)分区• List(列表)分区• 以及组合分区:Range-Hash,Range-List。 对于表而...
  • 今天研究下oracle中的位图索引,通过这边文章你会了解到,什么是位图索引?,什么情况下应该使用位图索引位图索引的检索数据的过程,以及位图索引的弊端? 一:什么是位图索引位图索引是从orac...
  • B 树索引更适合索引动态表的 OLTP 环境,而位图索引更适合在大型静态表上使用复杂查询的数据仓库环境。 bitmap索引特点: 3.Bitmap索引允许键值为空  B*Tree索引由于不记录空值,当基于is null的查询时,会...
  • 这里只能看到表中那些数据列有索引,但是如果先知道查询语句是否使用索引,还需使用SQL语句进行查询 --需要分析有无索引的SQL语句,for后面的 EXPLAIN PLAN FOR SELECT sex FROM people where sex like '男%'; ...
  • Oracle索引索引碎片问题解决

    千次阅读 2019-05-10 12:02:00
    反正死锁问题你看到刚才那个...下面咱们要讲一个概念,这个概念其实也是一样的,除了死锁这个事,咱们讲索引这个事,那索引我还是以ORACLE为例,MYSQL 其实都是一样的,其实都是想通的,其实上面的这些也都是想通的,ORACL...
  • 虽然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用。这就好像即使字典没有目录的话,用户仍然可以使用它一样。可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其...
  • 位图索引

    2018-08-01 16:25:00
    位图索引(bitmap index)是从Oracle7.3版本开始引入的。目前Oracle企业版和个人版都支持位图索引,但标准版不支持。位图索引是为数据仓库/即席查询环境设计的,在此所有查询要求的数据在系统实现时根本不知道。位图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,431
精华内容 4,572
关键字:

oracle创建位图索引语句