Oracle中通过位图索引提高查询效率
众所周知,索引可以在很大程度上提高数据库的查询效率。但是如果索引使用不当,如在不恰当的地方采用了不恰当的索引,那么反而会起到适得其反的效果。如下图所示的表,该采用什么索引呢?笔者借这个机会,跟大家讨论一下位图索引的使用时机以及注意事项。 一、 B树索引的缺陷。 在实际工作中,B树索引是Oracle数据库中最常用的一种索引。如在使用Create Index语句创建索引的时候,默认采用的就是B树索引。在B树索引中,是通过在索引中保存排序过的索引列以及其对应的Rowid列的值来实现的。不过对于某些比较特殊的情况,如基数比较小的
GP上的分区表
对于大数据量的表我们通常会对其按照一定规则进行分区存储,以便提高查询效率,下面简单对GP上分区表的创建、分区的增加和删除进行了整理。一、创建GP中表的分区都只能在创建表的时候定义,因此如果需要对表做分区一定要在create表的时候定义,对已经存在的表再做分区调整需要重建表并重新加载数据。单层分区表 create table h_t (a int ,b varchar(10),c date) distributed by (a) partition by list (b)(partition a values (’n',’N'),partition b values (’Y',’y'));如果在list的partition value中定义null值,在where条件中限制只
转载:解耦宽表体系
数据仓库应用中,宽表模型以结构简单,模型容易理解,数据访问效率等优势,被业界广泛采用。所谓宽表就是,基于某个实体分析对象而建立的一个逻辑数据体系,由实体的维度、描述信息、以及基于这个实体一系列度量组成。它是一个逻辑的概念,在物理实现中不可能就针对一个实体对象建立一个大宽表。因为这样,对于,刷新效率,容错能力,扩展能力都是一个很大的挑战,如何设计和组织宽表的体系结构呢?其实,我们回到软件设计的基本思想-高内聚,低耦合。我们要从在业务、ETL刷新、指标属性、数据来源等角度,让高度内聚的属性、描述、度量放
GP的规则系统
GP上的create or replace view只能重定义字段及字段类型和原视图相同的视图,如果有增加或删除字段或者字段类型发生改变此命令就无法重建视图,GP上的视图是由一种叫做规则(Rule)的机制实现的,规则用来实现一些与触发器不同的更加自定义的功能。规则系统介于查询编译器和执行优化器之间,根据规则来修改查询。GP的规则信息保存在pg_rewrite表中。基本语法:CREATE RULE 规则名 AS ON {SELECT | INSERT | UPDATE | DELETE} TO 表名 [WHERE 规则条件] DO [INSTEAD] {NOTHING | 命令 | (命令, 命令…)}建立一个视图过程如下:alig
GP优化总结
总结了一些常用的GP优化经验,分享给大家,欢迎拍砖哈!一、从技术角度1 模型优化1)分散键不合理:在初建表的时候,可能对业务理解不够或者后续需求不太明确,所建表的分散键设置不合理,导致后续使用的时候表要重分布,sql性能比较差;可以重建表来修改分散键或者使用alter table tablename set distributed by(column);语句修改分散键,如果数据量比较大的话还是重建表比较好。2)分区设置不合理:如数据量不大的表建了分区,每次使用的时候要扫描多个分区,其实每个分区的数据量不大,性能还不如不分区的好;这类情况可以将分区表改为
什么是Hadoop?
什么是Hadoop?搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做)。但很多开发的朋友在做了多年项目以后,都习惯是先How,然后What,最后才是Why,这样只会让自己变得浮躁,同时往往会将技术误用于不适合的场景。 Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
维度建模完全指南(二)
(二) 第二,加深了对维度建模和总线结构的理解 之前我感觉维度建模一般都会比较适合数据集市上的模型设计,因为在数据集市这一层所需要的维度会比较清晰,而且有比较多也比较明确的可加型指标,而在基础数据这一层维度建模可能不太合适,因为基础数据这一层更多关注的最细粒度的,比较贴源的模型能更好的表达业务含义。由于此书都是结合一些行业实例进行讲解,透过这些实例,改变了我之前对维度建模一些的认识。例如,书中在介绍电子商务行业基于页面事件粒度层面的点击流方案设计的事实表如下:一个时间维度
维度建模完全指南(一)
(一) 最近正在学习数据仓库建模鼻祖之一Kimball大师写的《The Data Warehouse Toolkit:The Complete Guide to Dimensional Modeling》,虽然还没有看完但也已经有些感触。 第一,理论化了数据仓库模型设计的原则和维度建模的基本步骤 在我们进行数据仓库建模之前,无论是Kimball大师的维度建模还是Immon大师的3NF数据仓库建模,首先我们所必须要考虑的应该都是我们模型设计的原则, 我们在这些原则的基础上设计的数据仓库模型更易成功。总结起来大致有这样几点:数据易于存取:数据仓库的数据不能仅仅对开发人员
oracle中的schema
对于oracle中schema的真正含义我一直都有些含糊,因此,在网络上查找并整理了一些资料。定义:A schema is a collection of database objects (used by a user.). Schema objects are the logical structures that directly refer to the database’s data.A user is a name defined in the database that can connect to and access objects.Schemas and users help database administrators manage database security.从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在
teradata与oracle in/exists/not in/not exists 比较
在 exists的执行计划是一样的;2> exists/not exists执行计划的唯一区别是Inclusion vs. exclusion;3> in/not in :用teradata中任何值与unknown,因此优化器需要考虑空值比较的第三种逻辑值:exists则有些绕,而且exists好像只用于关联子查询(其他子查询当然也可以用,可惜没意义);2> 在不能确保字段非空的情况下,建议使用in/not in;3> 实际测试两个时间长短并不稳定(各有长短),因此不能在实际操作之前确切说出哪个是最好的Left Outer Join来完成,并且有时这么做可以获得更好的效率 另外,not in要比(not null),则使
索引的应用规律总结
建立正确的索引,是提高系统性能的有效方法。正确的索引可能使查询效率提高1000倍,而无效的索引可能是浪费了数据库空间,甚至大大降低查询性能。 索引的效果是和检索数据的SQL语句、数据库的繁忙程度、数据库空间大小相关的,当数据库性能下降,需要通过调整索引达到提高性能的时候,DBA应该充分考虑到影响索引性能的这些因素来重新构造索引。合理的索引设计要建立在对各种查询的分析和预测上。一、索引的管理成本1、 存储索引的磁盘空间2、 执行数据修改操作(INSERT、UPDATE、DELETE)产生的索引维护3、 在数据处理时回需额外的回退空间
Oracle中dual表的用途
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下:1、查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual;2、用来调用系统函数 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间 select SYS_CONTEXT('USERENV','TERMINAL') from dual;--获得主机名 select SYS_CONTEXT('USERENV','language') from dual;--获得当前 localeselect dbms_random.random from dual;--获得一个随机数3、得到序列的下一个值或当
oracle中创建索引的原则
Oracle资料,整理的创建索引的几条原则:需要平衡query合DML的需要,常用于(子)查询的表应建立索引; 把索引建到不同的表空间中; 用统一的extent大小: 五个block的倍数或者tablespace指定的MINIMUM EXTENT的倍数; 创建索引考虑用NOLOGGING参数,重建索引的时候也一样; 创建索引时INITRANS值应该比相应的table的值高一些; 对常用SQL语句的where条件中的列建立唯一索引或组合索引,组合条件查询中相应的组合索引更有效; 对于组合索引,根据列的唯一值概率,安排索引顺序; 如果一个列具有很低的数据基数,并且或者可具有空值,不应作为
ORACLE常用命令
Oracle常用命令第一章:日志管理 1.forcing log switches sql> alter system switch logfile; 2.forcing checkpoints sql> alter system checkpoint; 3.adding online redo log groups sql> alter database add logfile [group 4] sql> ('/disk3/log4a.rdo','/disk4/log4b.rdo') size 1m; 4.adding online redo log members sql> alter database add logfile member sql> '/disk3/log1b.rdo' to group 1, sql> '/disk4/log2b.rdo' to group 2; 5.changes the name of the online
Oracle中TO_DATE格式
TO_DATE格式(以时间:2007-11-02 13:45:25为例)Year: yy two digits 两位年 显示值:07yyy three digits 三位年 显示值:007yyyy four digits 四位年 显示值:2007Month: mm number 两位月 显示值:11mon abbreviated 字符集表示 显示值:11月,若是英文版,显示nov month spelled out 字符集表示 显示值:11月,若是英文版,显示november Day: dd number 当月第几天 显示值:02ddd number 当年第几天 显示值:02dy abbreviated 当周第几天简写 显示值:星期五,若是英文版,显示friday sp
新,生活
新的生活开始了,当然要有所改变![@more@]工作三年了,一直都想把在工作中学习到的新知识整理记录下来,可一直都没有把这个事做出来。现在换了个新工作环境,我发现在这里是逼着你要不断的学习,不断的充实自己,所有趁这个机会,就开个blog吧,把之前想做的做了。