首页 新闻 会员 周边 捐助

关于视图 和存储过程效率的问题

0
悬赏园豆:50 [已关闭问题]

今天在群里和一个人在效率方面碰上了

其中就有一个是 关于用视图慢的问题

因为我看拼的语句中用了inner join 所以我建议他用视图

他说慢

后来我页找了相关文章

好象效率是不高

但是问题是 我手写sql 用inner join 之内的查询

和视图先建立号 在查询 之间的效率有多大的差异

差异在哪儿

ps:个人觉得既然sql语句一样 视图在怎么招也是预编译过 没理由比写的sql语句慢 难道是视图改变了查询的操作方式?

第二个问题

存储过程和sql语句之间的效率差异

这个也是我觉得奇怪的

一直以来我认为存储过程就是编译且优化过的sql

如果在语句条件一样的情况下 只有通过传参数的形式 才能体现存储过程的优点

 

但是问题来了

今天碰到的那位兄弟在存储过程里拼sql 然后通过execute 执行

我觉得这种拼sql 的存储过程

在执行效率上应该和直接传sql差不到哪儿去(拼的东西能编译么=。=)

但是他说测试过差很多 存储过程快很多。。。。。

想问问 在存储过程拼的sql 和 直接在程序里执行sql语句差异在哪儿=。=

问题补充: 问题1 视图和sql语句效率差在哪儿 问题2 在存储过程里面拼语句和直接拼sql语句执行效率差异在哪儿?
小眼睛老鼠的主页 小眼睛老鼠 | 老鸟四级 | 园豆:2731
提问于:2008-12-25 16:22
< >
分享
其他回答(2)
1

这个问题问得好!十天之内不要采纳答案。

关于视图我知道一点。在数据更新的时候视图也会一起更新,也就是说视图在数据更新的时候已经执行了查询(如果更新多的话。。。),在select 的时候不花查询时间。
如果一个查询sql的一部分用视图来代替那这部分的查询时间就省掉了(读取与传输的时间当然还是要的)。
所以总的来说视图是浪费了时间的(因为与视图相关的数据更新的时候都要执行一次查询)。但使用视图进行查询的时间是缩短了的。视图用在更新操作少而查询多的地方比较好。

BB_Coder | 园豆:797 (小虾三级) | 2008-12-25 17:02
1

问题1 视图和sql语句效率差在哪儿
在sql中的视图一种是可以建立索引的,这儿的显然不是讨论这种的,如果视图没有建索引,这种视图和用sql语句查询的效率,相差无几,执行过的sql语句都会缓存预编译的结果,不管是在视图中inner join,还是在语句中inner join效果几乎没有差别。用视图有一个好处是使查询变的简单了(这很有意义),性能上我不认为会有什么提升。


问题2 在存储过程里面拼语句和直接拼sql语句执行效率差异在哪儿?

这种情况,个人认为没有什么差异,存储过程预编译,也不会预编译那些拼成的sql。如果说有效率差异,那在从客户端往服务器端传sql语句时,存储过程只需要传递少量的字节就可以了,这儿可能会有性能差异,但是也不是对存储过程预编译的差异。

玉开 | 园豆:8822 (大侠五级) | 2008-12-25 17:25
0

学习了.

我们的DBA也建议我不要用存储过程,而是拼sql,不过他考虑的是数据库服务器的问题,而不只是两者性能之间的差距..

有所为,有所不为 | 园豆:1200 (小虾三级) | 2008-12-26 10:58

你们DBA脑袋有坑吧,建议拼SQL?99.99%的情况下同样的一组sql 存储过程都会更快。

为什么?看看数据库的执行逻辑。

支持(0) 反对(0) luofer | 园豆:468 (菜鸟二级) | 2013-02-21 18:17

@luofer: 

鄙视别人的言论又没论据,张嘴就说,去查....啊,去看....啊.  

-_-

支持(1) 反对(0) 咖啡进行时 | 园豆:200 (初学一级) | 2015-09-26 08:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册