`
kayo
  • 浏览: 547872 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

SQL各种写法的效率问题(转)

SQL 
阅读更多

经常可以遇到这种情况:用不同的SQL写法可以达到同样的目的。爱钻牛角尖的人就想搞明白,诚然结果一样,但到底孰优孰劣?下面是我列出的一些,请兄弟们赐教。也请兄弟们将你们遇到的类似问题一并列出。  
   
  (1)一次插入多条数据时:  
  CREATE   TABLE   tb(ID   int,   名称   NVARCHAR(30),   备注   NVARCHAR(1000))  
  INSERT   tb       SELECT   1,'DDD',1  
  UNION     ALL                 SELECT   1,'5100','D'  
  UNION     ALL                 SELECT   1,'5200','E'  
   
  也可以这样:  
  CREATE   TABLE   tb1(ID   int,   名称   NVARCHAR(30),   备注   NVARCHAR(1000))  
  INSERT   TB1   (ID,名称,备注)VALUES(1,'DDD',1)  
  INSERT   TB1   (ID,名称,备注)VALUES(1,'5100','D')  
  INSERT   TB1   (ID,名称,备注)VALUES(1,'5200','E')  
   
  _________________________________  
  上面两种方法,哪种方法效率高?  
   
   
  根据我的认识,第二种方式效率会高些。因为union运算本身会做一个向中间表插入的操作。所以每一种方式执行步骤为:   执行完多个union操作,再执行多条数据插入操作  
  第二的方式只执行了多条数据插入操作,所以效率较高  
  (2)赋值时:  
   
  SELECT   @a=N'aa'  
  SET   @a=N'aa'  
  _________________________________  
  上面两种方法,哪种方法效率高?  
   
  感觉一样,只不过select可以多个变量同时赋值  
   
   
  (3)取前几条数据时  
  set   ROWCOUNT   2   select   *   from   tb   order   by   fd  
  select   Top   2   *   from   tb   order   by   fd  
  _________________________________  
  上面两种方法,哪种方法效率高?  
   
  我的看法是第二种效率较高,意思比较明确。记得好像是官方推荐的用法。   我对第一种方式的理解是:先写语句告诉引擎以后的语句我只要两条结果。之后又执行了select语句。微软有没有对这种情况做优化我不得而知。但select   top   2   微软肯定做了优化,所以一点可以肯定第二种方工的效率肯定不会比第一句低  
   
  (4)条件判断时  
    where   0<(select   count(*)   from   tb   where   ……)  
    where   exists(select   *   from   tb   where   ……)    
  _________________________________  
  上面两种方法,哪种方法效率高?  
   
  第二种会好些。exists一旦获取一条符合条件的结果便返回结果true,只有结果为false的时候才会扫描整个表。而第一种则无论表中记录状况如何都需对整个表进行扫描。  
   
  (5)NULLIF的使用----->同理它的反函数ISNULL的使用  
  update   tb   set   fd=case   when   fd=1   then   null   else   fd   end  
  update   tb   set   fd=nullif(fd,1)  
  _________________________________  
  上面两种方法,哪种方法效率高?  
   
  语句好像书解有误??    
  如果语句是这样的话:  
  update   tb   set   fd=case   when   fd   is   null   then   1   else   fd   end  
  update   tb   set   fd=isnull(fd,1)  
   
  感觉效率差不多,有机会测试下  
   
  (6)从字符串中取子字符串时  
  substring('abcdefg',1,3)  
  left('abcderg',3)_  
  ________________________________  
  上面两种方法,哪种方法效率高?  
   
  left更专业些有优势吧  
   
  (7)EXCEPT和Not   in的区别?  
   
  except没用过,感觉应该一样,都需要做逐行扫描,性能都比较低~~  
   
  (8)INTERSECT和UNION的区别?  
   
  intersect没用过没有发言权  
   
   
  以上这些答案完全凭经验,没有经过测试,如有错误欢迎指出....

分享到:
评论

相关推荐

    sql脚本优化

    今天根据经验总结一些高级查询(SQL)及SQL效率优化,有时同样能达到查询效果,但也许系统所耗费的资源可能有很大差异,由于SQL书写的影响,同一功能同一性能不同写法SQL的影响。下面是sql语句优化的一些提示要点,...

    泛微系统SQL语句大全

    泛微系统中常见的主要基于SQL server相关的SQL语句大全, 其中包括组织架构相关SQL,流程相关SQL以及其他自定义需求; 效率排名,等SQL总数将近百;

    SQL Server并行操作优化避免并行操作被抑制而影响SQL的执行效率

    但是,实际开发中,某些SQL语句的写法会导致用不到并行,从而影响到SQL的执行效率 所以,本文要表达的是:我们要利用好并行,不要让一些SQL的写法问题“抑制”了并行,让我们享受不了并行带来的快感 关于SQL ...

    sql优化规则详解(一些小总结)

    sql优化规则详解(一些小总结) 从sql语句的写法来描述如何提高效率

    收获不止SQL优化

    2.3.2 获取SQL的各种详细信息 29 2.4 本章总结延伸与习题 32 2.4.1 总结延伸 32 2.4.2 习题训练 33 第3章 循规蹈矩——如何读懂SQL执行计划 34 3.1 执行计划分析概述 35 3.1.1 SQL执行计划是什么 35 3.1.2 ...

    LECCO SQL Expert (智能自动SQL优化)

    直至无法产生新的输出或搜索限额满→对 输出的SQL语句进行过滤,选出具有不同执行计划的SQL语句(即不同的执行效率)→对得到的SQL语句进行批量测试,找出性能最好的SQL语句。图2 优化前的SQL语句 自动优化实例 假设...

    收获,不止SQL优化--抓住SQL的本质

    2.3.2 获取SQL的各种详细信息 29 2.4 本章总结延伸与习题 32 2.4.1 总结延伸 32 2.4.2 习题训练 33 第3章 循规蹈矩——如何读懂SQL执行计划 34 3.1 执行计划分析概述 35 3.1.1 SQL执行计划是什么 35 3.1.2 ...

    崔华-基于Oracle的SQL优化典型案例.7z

    分享的关于Oracle SQL优化的典型案例分析,在应有系统开发初期,由于数据库数据较少,对于sql语句各种写法的编写体现不出sql的性能优劣,随着数据的不断增加,出现海量数据,劣质sql与优质sql在执行效率甚至存在百倍...

    sql 优化语句的几个常用注意事项

    保证数据库性能的sql语句写法,注意事项,使得我们在书写时避免使数据库低效率的执行命令

    高级sql讲解课程

    高级sql讲解课程,SQL写法的优化,提高效率

    SQL语句优化,编写搞笑的sql语句

    为了到达同样的目的,sql语句可以有很多种写法,往往选择一种最效率的语句,是非常重要的。

    sql重要及不常用语句收集

    收集整理的sql重要及不常用语句 INSERT 语句用来在表或视图中添加新的行。在视图中插入一个新行也会在 视 图基于的表中插入这一行。 ● 使用 VALUES 子句为一行或多行指定列数据。例如: INSERT INTO staff VALUES ...

    数据分布决定SQL写法

    这是2016年8月份上海MOORACLE大会上陈宏义老师(老K)分享的一个案例,将一个merge SQL,通过改写成plsql的方式,大大提高了执行效率。 老虎刘在看到这个案例的时候,开始没有注意到执行计划里面显示的各表实际记录数...

    SQL培训第一期

    1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query Language)简称SQL,是一种关系数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统。 1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行...

    Oracle及SQL语句优化指南

    很适合开发人员在编写SQL时注意,这里虽然说是Oracle的优化,其实,很多是标准SQL需要注意的写法。具有非常高的共通性。 1.选用适合的ORACLE优化器 2.HERE子句中的连接顺序 3.通过内部函数提高SQL效率 4.EXISTS与IN...

    SQL性能优化

     同一功能同一性能不同写法SQL的影响  Select * from zl_yhjbqk  Select * from dlyx.zl_yhjbqk(带表所有者的前缀)  Select * from DLYX.ZL_YHJBQK(大写表名)  Select * from DLYX.ZL_YHJBQK(中间多...

    如何通过索引让SQL查询效率最大化?

    逻辑查询优化就是通过SQL等价变换提升查询效率,直白一点就是说,换一种查询写法执行效率可能更高。物理查询优化则是通过索引和表连接方式等技术来进行优化。当谈到通过索引去优化SQL查询效率,首先我们需要知道创建...

    SqlServer中批量update语句

    找到这个关系以后我们就不难写sql了 update S_USER set account=p.account from S_PERSON p where p.id=S_USER.person_id; 结果为: sqlserver as 语法举例 1、使用表名称别名 有两个表分别是:”Persons”

    集ACCESS与SQL数据类

    而Access与 SQL Server各有各的代码写法,对于后期的代码移植也造成不便。Socut.Data.dll则是经常很多代码优化、整理和归纳出的一个通用的数据库操作类,Access与SQL Server两种数据库同写一种代码。这个类写成组件...

Global site tag (gtag.js) - Google Analytics