就是我连接查询了十几张表,其中有一张表里面有十多万条数据查出来特别慢,然后再分组一查基本就出不来了,之后我把它建立成视图,求教优化视图的查询方法。存储过程太麻烦,表中也不能建立索引,其他的就别说了。。。
1、连接查询太多,尽量减少join,十几张表连接实在是令人发指;
2、数据量大的表优先通过子查询,然后根据子查询的小结果集再和其他表连接;
3、数据量较大的表创建索引,查询和分组充分利用索引;
如上述方法还是很慢,而你的查询要求不需要实时性,可考虑下面的解决方案:
4、不要用视图,定期结转十几张表的数据到一个中间表里,然后对该中间表单独查询
5、或者数据库全文检索
6、对数据进行应用改造,使用lucene、elastic search等全文检索进行优化
1、可以缩小到5张表,因为很多都是从一张表里取出来的数据;
2、不能子查询因为是要显示数据子查询只是查询条件;
3不能建立索引,因为这样会影响表的增删改,它里面都是导入进去的一次增加上千条都有可能;
4、定期结转是什么意思,表示没看懂。。。。时间发的太长的话就算了;
5没看懂。。。。;
6没看懂。。。。;
还有更好的办法吗。。。。。
@归来的小陆: 定期结转的意思就是,将你要建立视图的几种表数据“转移”到一张新表里面去,不用视图查询。数据库全文检索是RDBMS自带的扩展功能,可以实现高速查询。全文检索建议搜索下关键字,什么lucene之类的就出来了。
@JeffWong: 全文检索感觉太麻烦了,定期结转:“将你要建立视图的几种表数据‘转移’到一张新表里面去”,
是创建新表吗,这样数据怎么进去啊,还有那些数据都是算出来的,在VS数据查询的时候可以优化吗!
@归来的小陆: 是创建新表。根据join连接的几张表,按照业务逻辑,先插入大数据量的表,然后将其他关联的数据表数据取出来更新进去。几年前我在某电商干活,没少干这种事情,都是复杂查询,不要求实时性,每隔5分钟结转一次,效果非常好。
@JeffWong: 谢谢,不过这种方式对于我这种来说,不现实,我再想想办法吧