今天在群里和一个人在效率方面碰上了
其中就有一个是 关于用视图慢的问题
因为我看拼的语句中用了inner join 所以我建议他用视图
他说慢
后来我页找了相关文章
好象效率是不高
但是问题是 我手写sql 用inner join 之内的查询
和视图先建立号 在查询 之间的效率有多大的差异
差异在哪儿
ps:个人觉得既然sql语句一样 视图在怎么招也是预编译过 没理由比写的sql语句慢 难道是视图改变了查询的操作方式?
第二个问题
存储过程和sql语句之间的效率差异
这个也是我觉得奇怪的
一直以来我认为存储过程就是编译且优化过的sql
如果在语句条件一样的情况下 只有通过传参数的形式 才能体现存储过程的优点
但是问题来了
今天碰到的那位兄弟在存储过程里拼sql 然后通过execute 执行
我觉得这种拼sql 的存储过程
在执行效率上应该和直接传sql差不到哪儿去(拼的东西能编译么=。=)
但是他说测试过差很多 存储过程快很多。。。。。
想问问 在存储过程拼的sql 和 直接在程序里执行sql语句差异在哪儿=。=
这个问题问得好!十天之内不要采纳答案。
关于视图我知道一点。在数据更新的时候视图也会一起更新,也就是说视图在数据更新的时候已经执行了查询(如果更新多的话。。。),在select 的时候不花查询时间。
如果一个查询sql的一部分用视图来代替那这部分的查询时间就省掉了(读取与传输的时间当然还是要的)。
所以总的来说视图是浪费了时间的(因为与视图相关的数据更新的时候都要执行一次查询)。但使用视图进行查询的时间是缩短了的。视图用在更新操作少而查询多的地方比较好。
问题1 视图和sql语句效率差在哪儿
在sql中的视图一种是可以建立索引的,这儿的显然不是讨论这种的,如果视图没有建索引,这种视图和用sql语句查询的效率,相差无几,执行过的sql语句都会缓存预编译的结果,不管是在视图中inner join,还是在语句中inner join效果几乎没有差别。用视图有一个好处是使查询变的简单了(这很有意义),性能上我不认为会有什么提升。
问题2 在存储过程里面拼语句和直接拼sql语句执行效率差异在哪儿?
这种情况,个人认为没有什么差异,存储过程预编译,也不会预编译那些拼成的sql。如果说有效率差异,那在从客户端往服务器端传sql语句时,存储过程只需要传递少量的字节就可以了,这儿可能会有性能差异,但是也不是对存储过程预编译的差异。
学习了.
我们的DBA也建议我不要用存储过程,而是拼sql,不过他考虑的是数据库服务器的问题,而不只是两者性能之间的差距..
你们DBA脑袋有坑吧,建议拼SQL?99.99%的情况下同样的一组sql 存储过程都会更快。
为什么?看看数据库的执行逻辑。
@luofer:
鄙视别人的言论又没论据,张嘴就说,去查....啊,去看....啊.
-_-