Mondrian系列(五)-深入维度、层次和级别(6)-功能依赖优化

在一些情况中,可以通过采用已知的功能依赖优势来在数据处理过程中优化性能。这种依赖是典型的与产生数据相关的业务规则之结果,通常不能通过数据本身而推断。

在Mondrian中,功能依赖(Functional dependency)使用 元素的 属性以及 元素的 属性声明。

property成员的dependsOnLevelValue属性用于指明该成员属性的值功能上依赖哪个成员属性的Level值。换句话说,对一个给定的leve值,属性值是稳定的。

Hierarchy中的uniqueKeyLevelName属性用于指出给定的level(如果存在)采用所有在层次活动中更高level作为唯一替代key,确保对于那些level值的联合是唯一的。

要解释这些内容,看下面的例子:


    uniqueKeyLevelName=” Vehicle Identification Namber”>
   

   
   
        dependsOnLevelValue=”true”/>
        dependsOnLevelValue=”true”/>
    Vehicle Identification Number” column=”vehicle_id” type=”Numeric”/>
        dependsOnLevelValue=”true” />
        dependsOnLevelValue=”true” />
   
        dependsOnLevelValue=”true” />
   
   

在上面的例子中,我们知道一个给定的制造厂仅存在于一个单独的城市和省,一个给定的汽车只有一种颜色方案和一种内饰程度,并且许可证号码与每个单独的省关联。因此,我们可以说所有这些成员属性功能依赖相关的leve值。

另外,我们知道车辆识别号码唯一标识每辆车,每辆车只有一个许可证。因而,我们得知Make,Model,Manufacturing Plant的联合,以及Vechicle Identification Number唯一识别每辆车,license number是冗余的。

这些属性保证Mondrian生成的SQL语句中GROUP BY 能被优化。如果缺少任何功能依赖信息,典型的查询看起来会像下面那样:

SELECT

`automotive_dim`.`make_id` AS c0,

`automotive_dim`.`model_id` AS c1,

`automotive_dim`.`plant_id` AS c2,

`automotive_dim`.`plant_state_id` AS c3,

`automotive_dim`.`plant_city_id` AS c4,

`automotive_dim`.`vehicle_id` AS c5,

`automotive_dim`.`color_id` AS c6,

`automotive_dim`.`trim_id` AS c7,

`automotive_dim`.`license_id` AS c8,

`automotive_dim`.`license_state_id` AS c9

FROM

`automotive_dim` AS `automotive_dim`,

GROUP BY

`automotive_dim`.`make_id`,

`automotive_dim`.`model_id`,

`automotive_dim`.`plant_id`,

`automotive_dim`.`plant_state_id`,

`automotive_dim`.`plant_city_id`,

`automotive_dim`.`vehicle_id`,

`automotive_dim`.`color_id`,

`automotive_dim`.`trim_id`,

`automotive_dim`.`license_id`,

`automotive_dim`.`license_state_id`

ORDER BY

`...


我们知道当在查询中的所有属性也功能依赖于他们的level时,GROUP BY语句会被认为是冗余的,并且会完全去掉,以减少在一些数据库上的性能开销。在上面的例子中,如果给出了功能依赖上面的SQL语句会变成:

SELECT

`automotive_dim`.`make_id` AS c0,

`automotive_dim`.`model_id` AS c1,

`automotive_dim`.`plant_id` AS c2,

`automotive_dim`.`plant_state_id` AS c3,

`automotive_dim`.`plant_city_id` AS c4,

`automotive_dim`.`vehicle_id` AS c5,

`automotive_dim`.`color_id` AS c6,

`automotive_dim`.`trim_id` AS c7,

`automotive_dim`.`license_id` AS c8,

`automotive_dim`.`license_state_id` AS c9

FROM

`automotive_dim` AS `automotive_dim`,

ORDER BY

`...

如果查询不够深入到包含unique key的程度,或者有一些成员属性没有功能依赖于他们的level,一些数据库(尤其是MYSQL)允许在select中的列不全部出现在GROUP BY 语句中。在这样的一些数据库上,Mondrian能将功能依赖的属性移出GROUP BY语句,着眼工会减少SQL查询的处理时间。

SELECT

`automotive_dim`.`make_id` AS c0,

`automotive_dim`.`model_id` AS c1,

`automotive_dim`.`plant_id` AS c2,

`automotive_dim`.`plant_state_id` AS c3,

`automotive_dim`.`plant_city_id` AS c4,

`automotive_dim`.`vehicle_id` AS c5,

`automotive_dim`.`color_id` AS c6,

`automotive_dim`.`trim_id` AS c7,

`automotive_dim`.`license_id` AS c8,

`automotive_dim`.`license_state_id` AS c9

FROM

`automotive_dim` AS `automotive_dim`,

GROUP BY

`automotive_dim`.`make_id`,

`automotive_dim`.`model_id`,

`automotive_dim`.`plant_id`,

`automotive_dim`.`vehicle_id`,

`automotive_dim`.`license_id`,

ORDER BY

`...

注意,在Mondrian4.0时可能会有所改变。
0
0
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
快速回复 TOP
    个人资料
    Mondrian系列(五)-深入维度、层次和级别(6)-功能依赖优化_第1张图片
    wonder4
    • 访问:1214243次
    • 积分:15035
    • 等级:
    • 排名:第381名
    • 原创:432篇
    • 转载:100篇
    • 译文:19篇
    • 评论:186条
    文章分类
  • .Net和C#(2)
  • BI、数据仓库和数据挖掘(43)
  • IBM技术(6)
  • java理论与实践(97)
  • OO技术(14)
  • Oracle技术(162)
  • 原创(83)
  • 待翻译区(14)
  • 心情(66)
  • 测试技术(7)
  • 英语(9)
  • 过程和方法(17)
  • 项目(68)
    文章存档
  • 2015年09月(1)
  • 2015年04月(2)
  • 2014年12月(1)
  • 2014年11月(1)
  • 2014年10月(1)
  • 2014年08月(1)
  • 2014年06月(1)
  • 2014年03月(2)
  • 2013年11月(1)
  • 2013年08月(1)
  • 2013年07月(1)
  • 2013年06月(1)
  • 2013年05月(1)
  • 2013年03月(1)
  • 2013年02月(1)
  • 2013年01月(3)
  • 2012年12月(1)
  • 2012年11月(1)
  • 2012年10月(2)
  • 2012年08月(8)
  • 2012年07月(1)
  • 2012年06月(2)
  • 2012年05月(4)
  • 2012年04月(1)
  • 2012年03月(3)
  • 2012年02月(2)
  • 2011年12月(3)
  • 2011年10月(1)
  • 2011年09月(3)
  • 2011年08月(5)
  • 2011年07月(4)
  • 2011年04月(3)
  • 2011年03月(2)
  • 2011年02月(2)
  • 2010年12月(3)
  • 2010年10月(3)
  • 2010年09月(1)
  • 2010年08月(2)
  • 2010年07月(2)
  • 2010年06月(2)
  • 2010年05月(5)
  • 2010年04月(4)
  • 2010年03月(10)
  • 2010年02月(4)
  • 2010年01月(8)
  • 2009年12月(5)
  • 2009年11月(15)
  • 2009年10月(9)
  • 2009年09月(11)
  • 2009年08月(1)
  • 2009年07月(1)
  • 2009年06月(13)
  • 2009年05月(2)
  • 2009年04月(3)
  • 2009年03月(6)
  • 2009年02月(2)
  • 2009年01月(3)
  • 2008年12月(4)
  • 2008年11月(10)
  • 2008年10月(3)
  • 2008年09月(7)
  • 2008年08月(6)
  • 2008年07月(8)
  • 2008年06月(6)
  • 2008年05月(3)
  • 2008年04月(7)
  • 2008年03月(10)
  • 2008年02月(2)
  • 2008年01月(5)
  • 2007年12月(10)
  • 2007年11月(8)
  • 2007年10月(8)
  • 2007年09月(6)
  • 2007年08月(4)
  • 2007年07月(6)
  • 2007年06月(20)
  • 2007年05月(6)
  • 2007年04月(2)
  • 2007年03月(12)
  • 2007年02月(3)
  • 2007年01月(5)
  • 2006年12月(15)
  • 2006年11月(15)
  • 2006年10月(25)
  • 2006年09月(33)
  • 2006年08月(23)
  • 2006年07月(10)
  • 2006年06月(15)
  • 2006年05月(22)
  • 2006年04月(15)
  • 2006年03月(13)
  • 2006年02月(8)
  • 2006年01月(15)
    阅读排行
  • Oracle中锁定行的查找方法(186613)
  • KK音标和国际音标的对照(17896)
  • ORA-01830问题的解决(16956)
  • apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80(16433)
  • FICA是什么(15909)
  • 转换CLOB字段类型为VARCHAR2(14466)
  • ORA-02068: 以下严重错误源于 TO_XXXX.DW ORA-03135: 连接失去联系 问题的解决(13858)
  • ORA-01830问题的解决(12186)
  • 用P3P header解决iframe跨域访问cookie(11982)
  • ORA-06531: 引用未初始化的收集 的问题解决(11860)
    评论排行
  • PLSQL DEVELOPER中好用的textType插件(23)
  • apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80(10)
  • 使用JMX搭建WebLogic9监控软件(二)(5)
  • 转换CLOB字段类型为VARCHAR2(5)
  • java.lang.IllegalStateException: getWriter() has already been called for this response问题解决(5)
  • Mondrian系列(一)-Mondrian的四层架构(5)
  • JExcelAPI读写excel文件的例子。支持excel2003文件格式。(4)
  • 在父窗口操作iframe中的对象(4)
  • Mondrian系列(五)-深入维度、层次和级别(3)-Level显示和多层次结构(4)
  • 能吃的宝宝(4)
    推荐文章
    • *Android自定义ViewGroup打造各种风格的SlidingMenu
    • * Android 6.0 运行时权限处理完全解析
    • * 数据库性能优化之SQL语句优化
    • *Animation动画详解(七)——ObjectAnimator基本使用
    • * Chromium网页URL加载过程分析
    • * JavaScript “跑马灯”抽奖活动代码解析与优化(一)
    最新评论
  • java.lang.IllegalStateException: getWriter() has already been called for this response问题解决

    as763190097: 怎么我的加上这句话,还是不行?response.reset();sendMsg(request,re...

  • java.lang.IllegalStateException: getWriter() has already been called for this response问题解决

    l_w0510: O(∩_∩)O谢谢

  • PLSQL DEVELOPER中好用的textType插件

    leavin_q: 求 [email protected]

  • 给所有选择DB2作为cognos的content store受困扰的朋友们

    qq_30303901: 在哪里开始创建数据库呢?不懂 用 控制中心或命令行创建怎么创建~~~

  • java.lang.IllegalStateException: getWriter() has already been called for this response问题解决

    qq_28343753: 赞,SUPER赞

  • No persistence units parsed from {classpath*:META-INF/persistence.xml}问题解决

    u010799162: 还是不行啊

  • 你的组织为自动化测试做好准备了吗?

    huan_128: 值得学习,真是好东西

  • ORA-02064: 不支持分布式操作

    张雨露: 解决的方法呢?

  • java.lang.IllegalStateException: getWriter() has already been called for this response问题解决

    u012367513: 完美解决我的问题,赞

  • mmseg4j 1.9.1 + Solr 4.7.0 报错

    u013082133: 的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

    老婆
    • 老婆的链接 (RSS)
    朋友的blog
    • redbean的MSN空间
    • eygle老大的网站 (RSS)
    • DBA吧(目前已经关闭了,留个纪念吧)
    • bea论坛(目前已经关闭,留个纪念吧)
    • 非常好Oracle产品站
    • WebLogic爱好者网站,非常推荐
    • 我的独立blog

你可能感兴趣的:(sql,c,优化,mysql,数据库,hierarchy)