<%@ page contentType="text/html; charset=gb2312"%> 五种提高sqlserver性能的方法(三)
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
五种提高sqlserver性能的方法(三)
     发布者: 发布时间:2006-05-07

避免 left join 和 null  

当然,有很多时候您需要执行 left join 和使用 null 值。但是,它们并不适用于所有情况。改变 sql 查询的构建方式可能会产生将一个花几分钟运行的报告缩短到只花几秒钟这样的天壤之别的效果。有时,必须在查询中调整数据的形态,使之适应应用程序所要求的显示方式。虽然 table 数据类型会减少大量占用资源的情况,但在查询中还有许多区域可以进行优化。sql 的一个有价值的常用功能是 left join。它可以用于检索第一个表中的所有行、第二个表中所有匹配的行、以及第二个表中与第一个表不匹配的所有行。例如,如果希望返回每个客户及其定单,使用 left join 则可以显示有定单和没有定单的客户。

    此工具可能会被过度使用。left join 消耗的资源非常之多,因为它们包含与 null(不存在)数据匹配的数据。在某些情况下,这是不可避免的,但是代价可能非常高。left join 比 inner join 消耗资源更多,所以如果您可以重新编写查询以使得该查询不使用任何 left join,则会得到非常可观的回报。 

加快使用 left join 的查询速度的一项技术涉及创建一个 table 数据类型,插入第一个表(left join 左侧的表)中的所有行,然后使用第二个表中的值更新 table 数据类型。此技术是一个两步的过程,但与标准的 left join 相比,可以节省大量时间。一个很好的规则是尝试各种不同的技术并记录每种技术所需的时间,直到获得用于您的应用程序的执行性能最佳的查询。 

测试查询的速度时,有必要多次运行此查询,然后取一个平均值。因为查询(或存储过程)可能会存储在 sql server 内存中的过程缓存中,因此第一次尝试耗费的时间好像稍长一些,而所有后续尝试耗费的时间都较短。另外,运行您的查询时,可能正在针对相同的表运行其他查询。当其他查询锁定和解锁这些表时,可能会导致您的查询要排队等待。例如,如果您进行查询时某人正在更新此表中的数据,则在更新提交时您的查询可能需要耗费更长时间来执行。 

避免使用 left join 时速度降低的最简单方法是尽可能多地围绕它们设计数据库。例如,假设某一产品可能具有类别也可能没有类别。如果 products 表存储了其类别的 id,而没有用于某个特定产品的类别,则您可以在字段中存储 null 值。然后您必须执行 left join 来获取所有产品及其类别。您可以创建一个值为“no category”的类别,从而指定外键关系不允许 null 值。通过执行上述操作,现在您就可以使用 inner join 检索所有产品及其类别了。虽然这看起来好像是一个带有多余数据的变通方法,但可能是一个很有价值的技术,因为它可以消除 sql 批处理语句中消耗资源较多的 left join。在数据库中全部使用此概念可以为您节省大量的处理时间。请记住,对于您的用户而言,即使几秒钟的时间也非常重要,因为当您有许多用户正在访问同一个联机数据库应用程序时,这几秒钟实际上的意义会非常重大。

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
五种提高sqlserver性能的方法(四)
五种提高sqlserver性能的方法(五)
五种提高sqlserver性能的方法(六)
udf—sqlserver2000的新特性(1)
udf—sqlserver2000的新特性(2)
sqlserver连接vfp数据库的实现
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(6894)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(5854)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(1919)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(3413)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号