现在的位置: 首页 > 综合 > 正文

一道面试题:举例说明[存储过程],[视图]和[自定义函数]的应用场合

2013年06月06日 ⁄ 综合 ⁄ 共 1792字 ⁄ 字号 评论关闭

一道面试题:举例说明[存储过程],[视图]和[自定义函数]的应用场合.   
  1、需举例说明三种技术的应用场合,为什么选择这种而不是另外两种.   
  2、如果表结构发生了变化,以上三种是否都要重新编译。   

 

1,当需要用exec动态查询的时候,或者做某些处理的时候,另外两种是不能实现的,所以仅选择存储过程;   
  当查询的需求过于复杂经常用到的sql语句建立视图便于管理,重用,提高效率,并且没必要用到存储过程的,用视图;   
  自定义函数:例如我在一个语句里想查询出代码和代码含义,代码含义在别的表里面,虽然我可以做联合查询,但是多了的话会加大语句的复杂程度,不便于管理,所以用自定义函数,语句简化成从一个表里的查询,看着简单明了,模块化嘛;   
  2,当表结构变化了,当然要检查这3种东西!

 

---------------------------------------------------------------------------------------------------------------------------

 

From zjcxc(邹建)

 

1、需举例说明三种技术的应用场合,为什么选择这种而不是另外两种.   
    
  要根据实际情况,做适当的选择,所以不能定性那一种,也没有定性说一定在某场合使用某种技术   
  存储过程能用动态语句,能更新表,可以传递参数,可以是返回结果集,也可以是一个数据处理过程   
  视图能创建索引,但只限于用一个SQL语句能实现的东西,固定是返回结果集   
  函数可以返回表/值,但不能更新表,不用用动态SQL语句,但可以传递参数,调用也方便   
    
    
  2、如果表结构发生了变化,以上三种是否都要重新编译。   
  是的。。

  sp_refreshview   '视图名'   
  sp_recompile   '存储过程名/函数名'

 

 

--------------------------------------------------------------------------------------------------

 

我补充一点;(对于性能的)   
  1:[存储过程]:可以保留执行计划在过程高速缓存中,减少编译的时间。对于C/S结构要多用存储过程,只通过调用语句和参数调用存储过程直接在服务器上对数据进行操作,减少网络的代码传输量,提高系统的性能。  
  2:[视图]:对于复杂的连接查询和费时的用于生成报表的聚合查询可以通过索引视图来提高系统的性能。对于一般的视图而言在对视图进行查询时,都将在视图的内部进行查询操作,和直接的查询没有什么区别,只是在调用的时候方便。对于索引视图则将数据实际的存储在视图内,相当于一个表,这样避免了每次的视图内部连接操作,可以提高系统的性能。   
  3:[自定义函数]:自定义函数用于返回表的结果集,而不能对表进行更新操作,用自定义函数来返回查询数据的结果集的效率要比用存储过程返回查询的数据的结果集的效率要高的多。

 

-------------------------------------------------------------------------------------------------------------------------

 

同意楼上的,但:   
  用自定义函数来返回查询数据的结果集的效率要比用存储过程返回查询的数据的结果集的效率要高的多。   
    
  我不太清楚。我只知道自定义函数来返回查询数据的结果集可以在from后类似一个表使用,而存储过程的返回不能直接这么用,但还有效率高这么一说!   
  希望能详细说一下这一点!   
    
  我觉得这3个技术的目的有比较大的不同:   
  存储过程使用最灵活,可以通过复杂的逻辑来处理数据或返回数据集(我习惯把数据集写在表中)。   
  视图主要是为了编程规范、调用方便、便于维护,实际上就是代替复杂的SQL查询语句。楼上说的索引视图没有用过,但看效率可能还不如建一个固定的表。   
  函数的写法受和多限制,可以用来查数据库,就相当如一个子查询,我觉得用在批量数据的处理中虽然方便,但效率不太高。我用它多半是为了编程规范、调用方便、便于维护,主要处理一些规则,不含读取数据库的字段转换什么的。   
    
  个人用的一点心得!欢迎批评!

 

 

抱歉!评论已关闭.