view的速度问题和机制

视图是被经常使用的,主要是为了取数据方便、规范。比如一些计算公式可以直接放在视图里面,程序只要取就行了。

但是前这一个月我写了分货的sql程序,一家跨国公司,数据量比较大,业务规则十分的复杂。要考虑仓库存货、帐龄、订单、时间、地区比例、分货等级等。其中最复杂的是按时间地区进行多订单分货。

刚开始的时候,我写了4个表、4个视图、6个辅助存储过程、1个函数和2个主存储过程。400多张订单,1200多条产品居然分了我50多分钟,最后还导致了最终的结果表锁掉了,打不开。

后来分析了下,把视图拿掉了,直接使用表中的字段代替视图,分货的时候不断update字段。效果非常的好,再次执行只用了30多秒。

自己总结了下,问题主要是视图的运行方式有关。

个人认为:几乎所有的程序的速度主要是I/O量决定的。数据库也是这样,如果运行时I/O梁很大,自然速度慢,所以应该尽量减少不必要的I/O。具体就是减少数据库扫描的次数。

视图的运行机制的确和这个原则相反,因为视图是由select语句组成的,即使你仅仅只需要里面的1条数据,它也会遍历一次所有的select,这就大大增加了I/O。

如果数据量比较小的话,使用视图很方便,但是如果大数据量的话,使用视图作为数据的中介,的确不是个好办法,他所带来的速度损失直接和数据量有关,粗略的计算下,如果有1000数据,查找表需要1秒的话,查找视图可能是1000秒。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值