热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

位图索引

位图索引今天是2014-01-15,继续进行索引的相关技术学习,今天学习内容为位图索引;位图索引使用指南:1、一般位图索引使用在基数列比较小的列2、最好用于数据仓库和dss系统3、最好用于星型模式4、对于在索引列上有很多链接查询或是过滤查询的情况,位

位图索引 今天是2014-01-15,继续进行索引的相关技术学习,今天学习内容为位图索引; 位图索引使用指南: 1、一般位图索引使用在基数列比较小的列 2、最好用于数据仓库和dss系统 3、最好用于星型模式 4、对于在索引列上有很多链接查询或是过滤查询的情况,位

位图索引

今天是2014-01-15,继续进行索引的相关技术学习,今天学习内容为位图索引;
位图索引使用指南:
1、一般位图索引使用在基数列比较小的列
2、最好用于数据仓库和dss系统
3、最好用于星型模式
4、对于在索引列上有很多链接查询或是过滤查询的情况,位图索引有很高的性能
5、位图索引对dml操作支持性不好,建议在进行dml操作时删掉位图索引,之后再重建(同样适用于在分区上建立的位图索引)
位图索引创建:
create bitmap index index_name on table_name(table_column_name) nologging;
注意因为位图索引对dml语句支持性不好需要使用nologging操作。
另外位图索引不像B树索引一样不存储null值。B树索引对于单列字段是不存储null值的,对于多列字段其中一例不为null,另一列为null的索引是存储null值的。因此在B树索引列上如果存在null可能出现不走索引的情况,但是位图索引不会这样,因为它实际存储null值。
测试如下:

SQL> conn amy/rhys 
Connected.
SQL> select index_name,column_name,column_position,table_name from user_ind_columns where table_name='EMP';

INDEX_NAME                     COLUMN_NAME          COLUMN_POSITION TABLE_NAME
------------------------------ -------------------- --------------- ------------------------------
EMP_BTIDX1                     ENAME                              1 EMP

SQL> drop index emp_btidx1;

Index dropped.

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
      9888            xiaohai

15 rows selected.


SQL>  create index emp_idx1 on emp(ename);

Index created.

SQL> set autotrace trace

SQL> select * from emp where ename is null;


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    37 |     6   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    37 |     6   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ENAME" IS NULL)


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
         18  consistent gets
          0  physical reads
          0  redo size
       1004  bytes sent via SQL*Net to client
        523  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
SQL> set autotrace off

SQL> drop index emp_idx1;

Index dropped.

SQL> create bitmap index emp_btidx1 on emp(ename);

Index created.


SQL> set autotrace trace  

SQL> select * from emp where ename is null;


Execution Plan
----------------------------------------------------------
Plan hash value: 448664046

-------------------------------------------------------------------------------------------
| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |            |     1 |    37 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID | EMP        |     1 |    37 |     3   (0)| 00:00:01 |
|   2 |   BITMAP CONVERSION TO ROWIDS|            |       |       |            |          |
|*  3 |    BITMAP INDEX SINGLE VALUE | EMP_BTIDX1 |       |       |            |          |
-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("ENAME" IS NULL)


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
       1003  bytes sent via SQL*Net to client
        523  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> 

分区表与位图索引:

位图索引只能在分区表上创建本地索引,不能创建全局索引:

SQL> create bitmap index achivement_btidx1 on achivement(id);
create bitmap index achivement_btidx1 on achivement(id)
                                         *
ERROR at line 1:
ORA-25122: Only LOCAL bitmap indexes are permitted on partitioned tables


SQL> create bitmap index achivement_btidx1 on achivement(id) local nologging;

Index created.

SQL> drop index achivement_btidx1;

Index dropped.

SQL> create bitmap index achivement_btidx1 on achivement(id) global;
create bitmap index achivement_btidx1 on achivement(id) global
                                                        *
ERROR at line 1:
ORA-25113: GLOBAL may not be used with a bitmap index


SQL> 
索引组织表与位图索引:
在索引组织表上创建二级位图索引必须指定映射表mapping table,如果没有则可以添加映射表,在进行创建位图索引:
SQL> 
SQL> 
SQL> 
SQL> create table emp_list(
  2  emp_id number(6) not null,
  3  first_name varchar2(20)
  4  ,last_name varchar2(20),
  5  email varchar2(25) not null,
  6  constraint emp_list_pk primary key (emp_id,first_name)
  7  )
  8  organization index
  9  mapping table;

Table created.

SQL> create bitmap index emp_list_btidx1 on emp_list(email) nologging;

Index created.

SQL> drop index emp_list_btidx1;

Index dropped.

SQL> alter table emp_list move nomapping; 

Table altered.

SQL> create bitmap index emp_list_btidx1 on emp_list(email) nologging;
create bitmap index emp_list_btidx1 on emp_list(email) nologging
                                       *
ERROR at line 1:
ORA-28669: bitmap index can not be created on an IOT with no mapping table


SQL> alter table emp_list move mapping table;

Table altered.


SQL> create bitmap index emp_list_btidx1 on emp_list(email) nologging;

Index created.

SQL> 

另外在使用星型模式时,位图索引可以提高很高的性能,但是在中心事实表的外键列上必须创建位图索引,另外还需要配置星型转换参数如:star_transformation_enabled 为true;
如果没有走星型转换可以强制添加hint(提示)如:/*+star_transformation*/ /*+star_transformation fact(column_name)*/
在 开始也提到位图索引对dml语句支持性不好,因此在搞的dml操作的时候需要对位图索引进行unusable之后再重建。对于分区位图索引需要对每个分区进行位图索引重建;
如:alter index xxxx modify partition ppppppp unusable; alter index xxxx rebuild partition ppppppp;或是对分区上所有索引重建:alter table xxx modify partition xxxx rebuild unusable local indexes;

另外对于位图索引还有一个位图连接索引
位图连接索引适合与星型模式,就是一个大的事实表与维度表之间的连接列的物化连接,在创建连接索引过程中就已经完成了连接位置操作,连接的结果也存在于连接索引中,因此连接查询速度会更高:
创建实例如下

create bitmap index emp_bjix01
on xxx(a.ssss,b.dddd)
from www a,zzz b
where a.pp=b.pp
tablespace mmmmm
pctfree 5
parallel 4
local
nologging;


对于位图索引查看信息可以查看dba_indexes 和 dba_join_ind_columns两个视图获得相关信息。


推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了如何使用ActionScript 3.0 (AS3) 连接并操作MySQL数据库。通过具体的代码示例和步骤说明,帮助开发者理解并实现这一过程。 ... [详细]
  • 在即将迎来26岁生日之际,作者的人生陷入了低谷。经过近三年的硕士学习后,最终决定退学,并且面临没有工作经验的困境。尽管如此,作者依然坚定地选择为自己的人生负责。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍了美国最具影响力的十大财团,包括洛克菲勒、摩根、花旗银行等。这些财团在历史发展过程中逐渐形成,并对美国的经济、政治和社会产生深远影响。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
author-avatar
2449978963潇潇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有