专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

位图索引

来源:小嗨整编  作者:小嗨  发布时间:2024-03-20 08:40
摘要:位图索引今天是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 EMPSQL> 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            xiaohai15 rows selected.SQL>  create index emp_idx1 on emp(ename);Index created.SQL> set autotrace traceSQL> 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 processedSQL> set autotrace offSQL> 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 processedSQL>

登录后复制

分区表与位图索引:

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

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 tablesSQL> 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 indexSQL> 索引组织表与位图索引:在索引组织表上创建二级位图索引必须指定映射表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 tableSQL> 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_bjix01on xxx(a.ssss,b.dddd)from www a,zzz bwhere a.pp=b.pptablespace mmmmmpctfree 5parallel 4localnologging;

登录后复制

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


本文地址:网络百科频道 https://www.eeeoo.cn/wangluo/1151544.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


网络百科
小编:小嗨整编
相关文章相关阅读
  • 一文搞懂MySQL索引下推

    一文搞懂MySQL索引下推

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引下推的相关内容,索引条件下推也叫索引下推,英文全称indexconditionpushdown,简称icp,用于优化数据查询,下面一起来看一下,希望对大家有帮助。推荐学...

  • Mysql索引的最左前缀原则是什么

    Mysql索引的最左前缀原则是什么

    前言之所以有这个最左前缀索引归根结底是mysql的数据库结构B+树在实际问题中比如索引index(a,b,c)有三个字段,使用查询语句select*fromtablewherec='1',sql语句不会走index索引...

  • MySQL单列索引和联合索引总结

    MySQL单列索引和联合索引总结

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了单列索引和联合索引的相关问题,利用索引中的附加列,可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引,下面一起来看一下,希望对大家有帮助。推荐学习:mysql视频...

  • 位图索引

    位图索引

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

  • 深入了解MYSQL中删除索引的方法

    深入了解MYSQL中删除索引的方法

    mysql是一种关系型数据库管理系统,索引是mysql中非常重要的一部分。在mysql中,索引能够快速地定位到某个记录位置,进而提高查询效率。但是当索引过期或者不再使用时,我们需要删除它们以减少数据库的负担。在此篇文章中,我们将深入了解my...

  • PHP搜索引擎性能优化:Algolia的妙用之道

    PHP搜索引擎性能优化:Algolia的妙用之道

    php搜索引擎性能优化:algolia的妙用之道随着互联网的发展和用户对搜索体验的要求不断提高,搜索引擎的性能优化变得至关重要。在PHP开发领域,Algolia是一个强大且易于集成的搜索引擎服务。本文将介绍Algolia的妙用之道以及如何通...

  • mysql > 索引失效

    mysql > 索引失效

    mysql是一款广泛使用的关系型数据库管理系统。在开发中,索引可以提高查询效率,但有时候会遇到索引失效的情况,导致查询变慢,甚至无法使用索引。本文将介绍索引失效的原因、如何检测索引失效、如何优化索引以及一些实际案例。一、索引失效的原因索引列...

  • 索引是什么?

    索引是什么?

    索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的特殊数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。(推荐教程...

  • 周排行
  • 月排行
  • 年排行

精彩推荐