项目中某模块涉及复杂的查询报表。原来用的是很复杂的存储过程写的,运行速度比较慢(目前200-300秒左右,当初做好以后一般都是30秒内),我觉得不是我sql语句原因,而是他们数据库本身的原因。但是硬要我重新想个解决方案,牺牲掉同步性,要我想方法,每天早上运行程序处理截止到昨天的数据,让用户在白天查询的是
已经生成好的截止到昨天的统计数据,希望失去了同步性而换取性能。求赐教,有些什么好的解决方案吗????数据库:oracle,其实数据量也不是很大,sql语句写的也非常好,他们用传统的存储过程---循环分析来做,要900多秒。
已经生成好的截止到昨天的统计数据,希望失去了同步性而换取性能。求赐教,有些什么好的解决方案吗????数据库:oracle,其实数据量也不是很大,sql语句写的也非常好,他们用传统的存储过程---循环分析来做,要900多秒。
解决方案 »
- oracle命令 localhost
- 我想在oracle里保存一个数据, 用变量能保存吗?
- 大哥们!如何在shell下启动oracle 了 急!!!!
- ——————超级头痛的聚合函数问题,前辈们赐教了,谢谢
- 紧急: 重复纪录UPDATE
- 重命名检索列名的问题
- 在oracle 8i中 怎么根据已存在的数据库生成sql脚本语句 然后在另一台服务器的oracle 运行 就可以创建表了
- 我的操作系统是2003server,安装oracle92时提示,不是有效的WIN32程序 :(
- 用什么函数可以直接得到group by后的记录条数
- 初学oracle,请问.在sql*plus的一些操作
- 紧急 求助oracle 字符串列 拼接的问题
- Oralce 求当前月份的实际工作天数
然后再来查询,当然,这个要牺牲掉实时性。
如果实时性再高一些,可以做小时结等。
如果sql语句和硬件性能等已经不能挖潜的情况下,这样做也是没有办法的事
2。查看你的语句是否有in之类的关键字。(in关键字的效率是非常低)
如果根据LZ所说,想每天自动运行处理数据。可用oracle的job。利用JOB自动运行存储过程。将数据处理好,放到统计数据表里面去。当白天用户查询的时候,只需要查询统计数据表就可以了。比如可以将job设置为每天凌晨1点开始运行。至于性能方面,主要在于存储过程的合理性,其次才是机器硬件的问题。不知道LZ明白了没。。
嗯,谢谢VilenZYP ,其实就是他们数据库问题! 这个模块本来是另外一名同事做的,用的是传统存储过程,循环里进行业务逻辑处理, 数据量一上去,20-30分钟内根本出不来结果,直接卡死,然后我用了一条比较复杂嵌套较多的sql语句,当时立竿见影30秒内,后来系统用啊用啊,随着数据量增加,也就1,2分钟吧,某一夜之间,这个模块突然变成变慢了好几分钟了,其他查询也有类似变慢的倾向,现在就不想这些了,他们要我想办法,我就得换方案。
看看物化试图是否可行。