`

SQL SERVER 性能优化若干

阅读更多
SQL SERVER 性能优化若干:

1.选择最有效率的表名顺序(只在基于规则的优化器中有效)    
  
1.1SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理,在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表,当SQLSERVER处理多个表时,会运用排序及合并的方式连接它们, 

   首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序;然后扫描第二个表(FROM子句中最后第二个表);最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并 

   例如: 表 TAB1 16,384 条记录表 TAB2 5 条记录,选择TAB2作为基础表 (最好的方法) select count(*) from tab1,tab2 执行时间0.96秒,选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒;

1.2 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表    

例如: 
   EMP表描述了LOCATION表和CATEGORY表的交集 
   SELECT * 
   FROM LOCATION L, 
   CATEGORY C, 
   EMP E   ———— emp表是交集,所以放入最后位置
   WHERE E.EMP_NO BETWEEN 1000 AND 2000 
   AND E.CAT_NO = C.CAT_NO 
   AND E.LOCN = L.LOCN 
    
   将比下列SQL更有效率 
   SELECT * 
   FROM EMP E , 
   LOCATION L , 
   CATEGORY C 
   WHERE E.CAT_NO = C.CAT_NO 
   AND E.LOCN = L.LOCN 
   AND E.EMP_NO BETWEEN 1000 AND 2000

2.WHERE子句中的连接顺序  
  
   SQLSERVER采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾    
   例如: 
   (低效,执行时间156.3秒) 
   SELECT * 
   FROM EMP E 
   WHERE SAL > 50000 
   AND JOB = ’MANAGER’ 
   AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);    
   (高效,执行时间10.6秒) 
   SELECT * 
   FROM EMP E 
   WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO)  ————此步骤过滤的信息最多。where过滤是从上至下的,所以过滤最多的放在最上面
   AND SAL > 50000 
   AND JOB = ’MANAGER’;

3.SELECT子句中避免使用’*’。
当你想在SELECT子句中列出所有的COLUMN时,如果使用动态SQL列引用’*’虽然是一个方便的方法,但这是一个非常低效的方法。因为,SQLSERVER在解析的过程中,会将’*’依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间 



分享到:
评论

相关推荐

    SQL Server 2008数据库设计与实现

    第三部分深入探讨了SQL Server若干方面的技术细节,如数据保护、索引、并发访问等。通过将理论融入数据库实践,清晰地讲解了关系型数据库的设计原则,完整地展示了如何进行良好的关系型数据库设计,深入揭示了SQL ...

    懒人工作通OA SqlServer版 v5.8.8.5

    懒人工作通采用基于WEB的企业计算,采用了世界上最先进的微软技术:C#语言、SqlServer/Access数据库引擎和IIS服务器,性能稳定可靠。数据存取集中控制,避免了数据泄漏的可能。提供数据备份工具,保护系统数据安全。...

    分布式数据库试题及答案.doc

    1.3.3. 假设要求查询系号为1的所有学生的姓名和成绩,写出在全局模式上的SQL查询语句,并要求转换成相应的关系代数表示,画出全局查询树,请依次进行全局优化和分片优化,画出优化后的查询树。要求给出优化变换过程...

    Discuz!NT V3.0.0(Bulid090929)安装版源码

    Discuz!NT V3.0.0(Bulid090929)安装版源码 Discuz!NT 3.0 版本针对SQL Server 2005/2008的新特性做了存储...数据库选择sqlserver 填写数据库信息,在此前,请在数据库中创建一个空的数据库,然后用这个数据库名称。

    iCaMs 布线管理软件

    性能优化:  优化部分菜单显示顺序及逻辑;  规范并定义一批拓扑图编辑快捷键,提高操作效率;  增加CAD图纸的本地硬盘缓存;  增加CAD图纸的内存缓存:3张; iCaMs 3.0.4.0 升级日志(2011/4) 功能增加: ...

    研究生分布式数据库参考习题

    1.3.3. 假设要求查询系号为1的所有学生的姓名和成绩,写出在全局模式上的SQL查询语句,并要求转换成相应的关系代数表示,画出全局查询树,请依次进行全局优化和分片优化,画出优化后的查询树。要求给出优化变换过程...

    Telerik WPF控件的自编译版本

    里面有一个Pivot控件的示例,是通过Entity访问SQL Server,可能在其他机器上不能运行,其他示例都是可运行的。 附件中包含一个WPFHelper.exe和其他主要的DLL,本来也编译了设计时支持的DLL,算了,以后有需要再传吧...

    数据库学习基础之名词解释

    SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。 其主要特点如下:  (1)高性能设计,可充分利用...

    懒人工作通OA Access版 v5.8.8.5

    懒人工作通采用基于WEB的企业计算,采用了世界上最先进的微软技术:C#语言、SqlServer/Access数据库引擎和IIS服务器,性能稳定可靠。数据存取集中控制,避免了数据泄漏的可能。提供数据备份工具,保护系统数据安全。...

    Oracle9i的init.ora参数中文说明

    shared_server_sessions: 说明 : 指定允许的共享服务器体系结构用户会话的总数。设置此参数可为专用服务器保留一些用户会话。 值范围: 0 到 SESSIONS - 5 默认值 : 派生: MTS_CIRCUITS 和 SESSIONS - 5 两者中的较...

    交友相亲社交网站模板支持手机wap版

    ●打开数据库文件下的data.txt,复制里面的内容,打开phpmyadmin,点击刚建的wrzcnet_phpjiaoyou数据库名,点“SQL”按钮,粘贴data4.0.txt的内容,运行这个sql脚本 ●然后修改程序/sub/config.php,把数据库链接...

    VC与Labview、Matlab编程论文资料[2].rar

    VC_SQLServer和Matlab混合编程管理仿真数据.pdf VC_下MSComm控件的串口通信方法.pdf VC_与Matlab混合编程技术应用分析.pdf VC_与MATLAB混合编程的实现方法.pdf VC_与MATLAB混合编程研究及开发实例.pdf VC_与OpenGL...

    VC与Labview、Matlab编程论文资料

    VC_SQLServer和Matlab混合编程管理仿真数据.pdf VC_下MSComm控件的串口通信方法.pdf VC_与Matlab混合编程技术应用分析.pdf VC_与MATLAB混合编程的实现方法.pdf VC_与MATLAB混合编程研究及开发实例.pdf VC_与OpenGL...

    VC与Labview、Matlab编程论文资料[4].rar

    VC_SQLServer和Matlab混合编程管理仿真数据.pdf VC_下MSComm控件的串口通信方法.pdf VC_与Matlab混合编程技术应用分析.pdf VC_与MATLAB混合编程的实现方法.pdf VC_与MATLAB混合编程研究及开发实例.pdf VC_与OpenGL...

    jpivot学习总结.doc

    uniqueMembers 该属性用于优化产生的 SQL ,如果你知道这个级别和其父级别交叉后的值或者是维度表中给定的级别所有的值是唯一的,那么就可以设置该值为 true ,否则为 false 。 levelType 该 Level 的类型,默认...

    易语言程序免安装版下载

    修改外部数据库在4.12版中导致的不兼容问题,并增加了对MS SQL Server数据库中image和text字段类型的说明。 7. 修改扩展界面支持库一,禁止透明标签在父窗口刷新时自动刷新,以解决其导致窗口刷新缓冲的问题。 8....

Global site tag (gtag.js) - Google Analytics