壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 461|回复: 1

Cognos设计优化:如何让Cognos生成高效的SQL

[复制链接]
发表于 2012/3/13 23:02:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
Cognos的SQL语法翻译机制很复杂,而且,在其官方文档中也很少提及,所以研究起来更不是很容易,但就和性能密切相关的部分可以深入的探索一下。     抛开数据库的设计方面,包括存储、主机,最重要的技术算是索引了,特别是数据量比较大的时候更是如此。
     那么如何才能够让Cognos生成高效的SQL,执行过程中使用到索引呢?
     首先,过滤条件尽可能在FM模型层实现,这样,在生成的目标SQL中,过滤可以有更多的机会出现在每一个子查询中。
     其次,参与过滤的Cognos查询对象一定要直接对应到数据库字段,不能使用变形后或者函数处理后的结果进行过滤。
     再次,过滤条件即要在维表中定义,同时也尽量定义在事实表对象中。
     最后,如果事实表中已经存在字段,不要再到维表中去关联。

     以上几点的重点是围绕索引进行优化,积极引导Cognos生成的SQL能够有效率用索引,只要能够规避大规模的全表扫描,SQL性能就基本上能够满足应用;
    进一步优化还可以通过FM模型中使用查询主体的嵌套引导生成嵌套式SQL,从而可以进一步优化目标SQL。
    在数据库设计方面,要严格按照星型模型+第三范式的方式原则设计,必要时牺牲存储,通过数据冗余来换效率,严禁为了数据插入或更新效率牺牲查询效率。
    总之,Cognos能够比较好的生成高效的SQL,但是如果从数据模型到结果之间的映射过于复杂,那么Cognos可能无法翻译成高效的SQL,甚至是生成效率极其低下的SQL,最终导致生成效率低下,因此,数据模型设计是SQL优化的源头,如果这个源头错了,那么后续的设计优化就是一句空话。
 楼主| 发表于 2012/3/13 23:03:01 | 显示全部楼层
就我使用RS过程中的一些经验,个人觉得,一方面是做好数据库的table的主外键和索引,对条件过滤频率最高的字段设置聚集索引,另一个是在cognos方面,如果查询条件多,尽量从table里取数据,少使用存储过程,使用存储过程虽然灵活,但是在cognos里速度会比直接从table里取数据慢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 12:18 , Processed in 0.011041 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表