Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110024
  • 博文数量: 39
  • 博客积分: 2530
  • 博客等级: 少校
  • 技术积分: 355
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-01 17:34
文章分类
文章存档

2011年(1)

2010年(28)

2009年(2)

2008年(8)

我的朋友

分类: Mysql/postgreSQL

2010-08-23 10:33:31

Infobright查询优化

  前面已经分析了Infobright的构架,简要介绍了Infobright的压缩过程和工作原理。现在来讨论查询优化的问题。

  

  (1)配置环境

    在Linux下面,Infobright环境的配置可以根据README里的要求,配置brighthouse.ini文件。

  (2) 选取高效的数据类型

    参见前面章节。

  (3)使用comment lookup

    参见前面章节。

  (4)尽量有序地导入数据

    前面分析过Infobright的构架,每一列分成n个DP,每个DPN列面存储着DP的一些统计信息。有序地导入数据能够使不同的DP的DPN内的数据差异化更明显。比如按时间date顺序导入数据,那么前一个DP的max(date)<=下一个DP的min(date),查询的时候就能够减少可疑DP,提高查询性能。换句话说,有序地导入数据就是使DP内部数据更加集中,而不再那么分散。

  (5)使用高效的查询语句。

    这里涉及的内容比较多了,总结如下:

        尽量不适用or,可以采用in或者union取而代之

    减少IO操作,原因是infobright里面数据是压缩的,解压缩的过程要消耗很多的时间。

    查询的时候尽量条件选择差异化更明显的语句

           Select中尽量使用where中出现的字段。原因是Infobright按照列处理的,每一列都是单独处理的。所以避免使用where中未出现的字段可以得到较好的性能。

           限制在结果中的表的数量,也就是限制select中出现表的数量。

          尽量使用独立的子查询和join操作代替非独立的子查询

     尽量不在where里面使用MySQL函数和类型转换符

          尽量避免会使用MySQL优化器的查询操作

     使用跨越Infobright表和MySQL表的查询操作

    尽量不在group by 里或者子查询里面使用数学操作,如sum(a*b)。

    select里面尽量剔除不要的字段。

 

  Infobright执行查询语句的时候,大部分的时间都是花在优化阶段。Infobright优化器虽然已经很强大,但是编写查询语句的时候很多的细节问题还是需要程序员注意。  

阅读(1860) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-25 08:40:56

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com