首页 新闻 会员 周边

请问oracle中的视图可以优化查询速度吗,如何优化,急!!!

0
悬赏园豆:80 [已解决问题] 解决于 2015-07-06 12:50

就是我连接查询了十几张表,其中有一张表里面有十多万条数据查出来特别慢,然后再分组一查基本就出不来了,之后我把它建立成视图,求教优化视图的查询方法。存储过程太麻烦,表中也不能建立索引,其他的就别说了。。。

归来的小陆的主页 归来的小陆 | 初学一级 | 园豆:75
提问于:2015-07-03 08:58
< >
分享
最佳答案
1

1、连接查询太多,尽量减少join,十几张表连接实在是令人发指;

2、数据量大的表优先通过子查询,然后根据子查询的小结果集再和其他表连接;

3、数据量较大的表创建索引,查询和分组充分利用索引;

如上述方法还是很慢,而你的查询要求不需要实时性,可考虑下面的解决方案:

4、不要用视图,定期结转十几张表的数据到一个中间表里,然后对该中间表单独查询

5、或者数据库全文检索

6、对数据进行应用改造,使用lucene、elastic search等全文检索进行优化

收获园豆:80
JeffWong | 老鸟四级 |园豆:2328 | 2015-07-03 09:33

1、可以缩小到5张表,因为很多都是从一张表里取出来的数据;

2、不能子查询因为是要显示数据子查询只是查询条件;

3不能建立索引,因为这样会影响表的增删改,它里面都是导入进去的一次增加上千条都有可能;

4、定期结转是什么意思,表示没看懂。。。。时间发的太长的话就算了;

5没看懂。。。。;

6没看懂。。。。;

还有更好的办法吗。。。。。

归来的小陆 | 园豆:75 (初学一级) | 2015-07-03 09:49

@归来的小陆: 定期结转的意思就是,将你要建立视图的几种表数据“转移”到一张新表里面去,不用视图查询。数据库全文检索是RDBMS自带的扩展功能,可以实现高速查询。全文检索建议搜索下关键字,什么lucene之类的就出来了。

JeffWong | 园豆:2328 (老鸟四级) | 2015-07-03 12:09

@JeffWong: 全文检索感觉太麻烦了,定期结转:“将你要建立视图的几种表数据‘转移’到一张新表里面去”,

是创建新表吗,这样数据怎么进去啊,还有那些数据都是算出来的,在VS数据查询的时候可以优化吗!

归来的小陆 | 园豆:75 (初学一级) | 2015-07-03 12:41

@归来的小陆: 是创建新表。根据join连接的几张表,按照业务逻辑,先插入大数据量的表,然后将其他关联的数据表数据取出来更新进去。几年前我在某电商干活,没少干这种事情,都是复杂查询,不要求实时性,每隔5分钟结转一次,效果非常好。

JeffWong | 园豆:2328 (老鸟四级) | 2015-07-03 12:55

@JeffWong: 谢谢,不过这种方式对于我这种来说,不现实,我再想想办法吧

归来的小陆 | 园豆:75 (初学一级) | 2015-07-03 13:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册