问大家关于视图和存储过程快慢的问题~!知道多少,说多少,谢呢!~

zhenglianghui 2010-04-07 01:47:59
各位,下午好,今天碰到一个问题,不知道该如何选择,问下各位的意见。
现在我接手做呢一个站,有七八个栏目,信息量很大,但其中有四五个栏目是相同的信息发布系统。
因此设计的数据库使用呢一张表,其中采用typeone,typetwo,typethree,来区分,一级栏目,二级栏目和三级子栏目。

现在的问题是:关于使用试图和使用存储过程效率高低的问题。
同事的意见是:使用试图,查询这张表,把每张表,每个栏目,每个子栏目都是用试图来做,在查询的时候,分页的时候,直接调用试图名称,查询返回dataTable.
我使用的是:共有的存储过程,传表面,主键和查询条件进去,查询返回DataTable。

我想问的是:使用试图的效率高些,还是使用存储过程的效率高些。

我对试图的理解是:就是给人看的,也没提高效率,可能理解有误,希望大家多多说点,谢呢~!



...全文
536 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
whywen_MoJian 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wosizy 的回复:]
引用 6 楼 zlhxiaohui 的回复:

引用 4 楼 wosizy 的回复:
像这种信息量很大的数据 就用
存储过程快 吧

能否说下原因?,大致描述一下也行,我觉得,不管是视图还是存储过程(他们两个都在sqlsever200里面),如何区分它们的效率呢?谢呢。

存储过程优点是效率比较高,这主要决定于他的执行机制

视图他比较方便,在效率上来说比存储过程差,但是他在实……
[/Quote]

顶一个
5Br 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 sp1234 的回复:]
意义不大。这两个都可以不用。

如果网站每小时发现重复的查询条件(记录过滤条件、分页页号,等等)的查询被重复了1000次,那么你绝对是设计错误了。因为只需要查询一次,以后就应该从数据缓存中取得。这才是效率的关键,何必纠缠过程还是视图那些无关痛痒的东西呢?

使用数据缓存有两个倾向,一个就是滥用缓存,例如只应该缓存一页数据的时候许多人竟然去缓存整个数据表;另一个就是应该原始数据被修改的时候(……
[/Quote]


请问,
这个 每小时 重复 的查询条件 ,在哪里可以看到呢
  • 打赏
  • 举报
回复
一个就是滥用缓存 --> 一个就是不能滥用缓存
  • 打赏
  • 举报
回复
意义不大。这两个都可以不用。

如果网站每小时发现重复的查询条件(记录过滤条件、分页页号,等等)的查询被重复了1000次,那么你绝对是设计错误了。因为只需要查询一次,以后就应该从数据缓存中取得。这才是效率的关键,何必纠缠过程还是视图那些无关痛痒的东西呢?

使用数据缓存有两个倾向,一个就是滥用缓存,例如只应该缓存一页数据的时候许多人竟然去缓存整个数据表;另一个就是应该原始数据被修改的时候(例如数据表中的数据被修改时)要立刻清除缓存,这样下一个操作可以读出最新的数据来重建缓存。做到这两点就达到掌握数据缓存技术基本要求。
wonderful_ecode 2010-04-07
  • 打赏
  • 举报
回复
期待真理
丰云 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 ahsun1987 的回复:]
点击查看真相
[/Quote]
Taiyangchen 2010-04-07
  • 打赏
  • 举报
回复
缪军 2010-04-07
  • 打赏
  • 举报
回复
我觉得单纯的讨论sp和view的效能差异是没有意义的
视图实际上就是一个SELECT代码设计器,它就是一条代码,
它的查询效率跟它是不是视图没有直接关系,
重要的是你的代码是否合理,
一个富有经验的数据库设计人员懂得充分利用视图减少代码量,同时又不降低性能.
woaixiayutian 2010-04-07
  • 打赏
  • 举报
回复
存储过程+缓存(小数据量,但是常用的最好缓存了,主要也是取决于服务器内存大小)
iloveyoubaby 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zlhxiaohui 的回复:]
引用 4 楼 wosizy 的回复:
像这种信息量很大的数据 就用
存储过程快 吧

能否说下原因?,大致描述一下也行,我觉得,不管是视图还是存储过程(他们两个都在sqlsever200里面),如何区分它们的效率呢?谢呢。
[/Quote]

视图其实只是在数据库中保存了一段代码,数据其实还是保存在原来的表中,如果大量数据调用的视图,试图是先从原始表中调出数据,然后倒出,而存储过程在数据库中保存时,数据库已经预编译了,而且进行了优化,而且可以针对性的参数化,减少数据查询量
鸭梨山大帝 2010-04-07
  • 打赏
  • 举报
回复
不同概念的两个东西去对比性能?没意义

视图是从不同角度去观察表,是一种虚拟表.

存储过程是实现一定逻辑的SQL语句的封装.里面可以调用视图.

他们的共同点就是用T-SQL写的.... ...

比如一个sp: sp1 里面只有一句话 select * from 视图
exec sp1 跟直接写SQL语句 select * from 视图
99.99%没差别,除了预处理sp的那点可以忽略不计的时间.
liuyileneal 2010-04-07
  • 打赏
  • 举报
回复
使用视图看起来直观,并且如果单个视图查询的话效率也不会比存储过程差。。
但是如果使用的是视图的嵌套,效率比使用存储过程就要差了,
还是使用存储过程吧,
zhenglianghui 2010-04-07
  • 打赏
  • 举报
回复
感谢各位的描述,我自己在仔细体会下各位的话,谢呢!~等会马上结贴。
还能说的,希望在说点,多多宜善。


看啦很有必要加强对数据库的学习呢~!
vrhero 2010-04-07
  • 打赏
  • 举报
回复
两者根本就不同概念,没有可比性...使用存储过程操作视图效率高...
丰云 2010-04-07
  • 打赏
  • 举报
回复
目前流行的关系型数据库,
是建立在严格的数学原理基础上的,
也就是集合论。
数据库中每一个表都是一个集合,
表中的每个子段都是一个表的子集合,
每个子段的每个值又是该字段的子集合。。。。
视图内部实现原理是直接对指定的子段进行跨表引用。
形成一个逻辑上的新表,
所以他访问数据的速度跟原表访问数据的速度是一样的。
凤凰涅檠 2010-04-07
  • 打赏
  • 举报
回复
mark up , 测试完给个结果看看
sxy445566 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 disciple_wr 的回复:]
先测试下两种方法的查询速度
[/Quote]

汗颜。。
丰云 2010-04-07
  • 打赏
  • 举报
回复
简单的说,
通过引用来得到某个变量的值,
与通过赋值给中间变量,
再得到该变量的值,
那个更快?
显然,通过引用快!
因为引用其实就是该变量的指针,
而第二种方法要经过一次赋值操作,
慢多了。
disciple_wr 2010-04-07
  • 打赏
  • 举报
回复
先测试下两种方法的查询速度
wosizy 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zlhxiaohui 的回复:]

引用 4 楼 wosizy 的回复:
像这种信息量很大的数据 就用
存储过程快 吧

能否说下原因?,大致描述一下也行,我觉得,不管是视图还是存储过程(他们两个都在sqlsever200里面),如何区分它们的效率呢?谢呢。
[/Quote]
存储过程优点是效率比较高,这主要决定于他的执行机制

视图他比较方便,在效率上来说比存储过程差,但是他在实际的运用过程提供了不少方便,可以把一些复杂的查询清晰化

1、存储过程是用户写好后编译好的过程,调用的时候直接调用就行了,减少了编译的时间。

2、存储过程直接存在服务器上,减少了客户端与服务端的传输过程。

3、可以直接调用,很方便,可以重复使用,而不需要知道内部是怎么做的。

4、安全性,这样用也增加了安全性。
视图它是一个虚表,沒有存放現實的數據﹐简单的说它是用来查询的一种用户定主的查询规则。所有的操作数据是基于基表的!

视图可以:

为用户提供相关的数据

隐藏数据的复杂性

从导构源组织数据

减少对象大小
加载更多回复(8)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧