网站公告列表     变态下载新版:http://down.biantai.net  [admin  2008年1月16日]        
加入收藏
设为首页
联系站长
站长学院 网页制作 网络编程 图形图象 数据库类 服务器类 操作系统
站长供求 网站交易 域名交易 程序交易 服务器空间 下载反馈 软件报错
网站运营 搜索优化 建站心得 业界新闻 网站推广 普通留言
精品源码 ASP源码 PHP源码 .NET源码 JSP源码 建站素材 建站书籍
软件下载 站长软件 常用软件 系统辅助 电影游戏 站长工具 QQ素材站
字体下载 中文字体 英文字体 图形字体 其他字体 变态论坛 变态下载07版
桌面壁纸 系统壁纸 动植物类 游戏卡通 女性主题 高清壁纸 其他壁纸
您现在的位置: 变态下载 >> 站长学院 >> 数据库类 >> 正文
  四项技术提高SQL Server的性能            【字体:
四项技术提高SQL Server的性能
作者:佚名    文章来源:不详    点击数:    更新时间:2008-1-25    

有时,为了让应用程序运行得更快,所做的全部工作就是在这里或那里做一些很小调整。但关键在于确定如何进行调整!迟早您会遇到这种情况:应用程序中的 SQL 查询不能按照您想要的方式进行响应。它要么不返回数据,要么耗费的时间长得出奇。如果它降低了企业应用程序的速度,用户必须等待很长时间。用户希望应用程序响应迅速,他们的报告能够在瞬间之内返回分析数据。就我自己而言,如果在Web上冲浪时某个页面要耗费十多秒才能加载,我也会很不耐烦。
  为了解决这些问题,重要的是找到问题的根源。那么,从哪里开始呢?根本原因通常在于数据库设计和访问它的查询。我将讲述四项技术,这些技术可用于提高基于SQL Server的应用程序的性能或改善其可伸缩性。我将仔细说明 LEFT JOIN、CROSS JOIN 的使用以及IDENTITY 值的检索。请记住,根本没有神奇的解决方案。调整您的数据库及其查询需要占用时间、进行分析,还需要大量的测试。这些技术都已被证明行之有效,但对您的应用程序而言,可能其中一些技术比另一些技术更适用。

  从 INSERT 返回 IDENTITY

  我决定从遇到许多问题的内容入手:如何在执行SQL INSERT后检索IDENTITY值。通常,问题不在于如何编写检索值的查询,而在于在哪里以及何时进行检索。在SQL Server中,下面的语句可用于检索由最新在活动数据库连接上运行的 SQL 语句所创建的 IDENTITY 值:

  SELECT @@IDENTITY


  这个 SQL 语句并不复杂,但需要记住的一点是:如果这个最新的 SQL 语句不是 INSERT,或者您针对非 INSERT SQL 的其他连接运行了此 SQL,则不会获得期望的值。您必须运行下列代码才能检索紧跟在 INSERT SQL 之后且位于同一连接上的 IDENTITY,如下所示:

  INSERT INTO Products (ProductName) VALUES ('Chalk')
  SELECT @@IDENTITY


  在一个连接上针对 Northwind 数据库运行这些查询将返回一个名称为 Chalk 的新产品的 IDENTITY 值。所以,在使用ADOVisual Basic应用程序中,可以运行以下语句:

  Set oRs = oCn.Execute("SET NOCOUNT ON;INSERT INTO Products _
  (ProductName) VALUES ('Chalk');SELECT @@IDENTITY")
  lProductID = oRs(0)


  此代码告诉 SQL Server 不要返回查询的行计数,然后执行 INSERT 语句,并返回刚刚为这个新行创建的 IDENTITY 值。SET NOCOUNT ON 语句表示返回的记录集有一行和一列,其中包含了这个新的 IDENTITY 值。如果没有此语句,则会首先返回一个空的记录集(因为 INSERT 语句不返回任何数据),然后会返回第二个记录集,第二个记录集中包含 IDENTITY 值。这可能有些令人困惑,尤其是因为您从来就没有希望过 INSERT 会返回记录集。之所以会发生此情况,是因为 SQL Server 看到了这个行计数(即一行受到影响)并将其解释为表示一个记录集。因此,真正的数据被推回到了第二个记录集。当然您可以使用 ADO 中的 NextRecordset 方法获取此第二个记录集,但如果总能够首先返回该记录集且只返回该记录集,则会更方便,也更有效率。

  此方法虽然有效,但需要在 SQL 语句中额外添加一些代码。获得相同结果的另一方法是在 INSERT 之前使用 SET NOCOUNT ON 语句,并将 SELECT @@IDENTITY 语句放在表中的 FOR INSERT 触发器中,如下面的代码片段所示。这样,任何进入该表的 INSERT 语句都将自动返回 IDENTITY 值。

  CREATE TRIGGER trProducts_Insert ON Products FOR INSERT AS
  SELECT @@IDENTITY
  GO


  触发器只在 Products 表上发生 INSERT 时启动,所以它总是会在成功 INSERT 之后返回一个 IDENTITY。使用此技术,您可以始终以相同的方式在应用程序中检索 IDENTITY 值。

 


文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    手绘技术超级合集
    抠图技术超级合集
    SQL Server业务规则链接技术…
    关于ASP.NET技术的学习顺序问…
    中国站长第一门户:WWW.CHIN…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    变态下载 2006-2008 保留网站解释权利。感谢网友对本站的支持,我们一直在努力!

    鲁ICP备06027999号 站长:韩江波