`
kayo
  • 浏览: 557942 次
  • 性别: 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写法"这一标题揭示了我们即将探讨的是一些非同寻常的MySQL查询技巧,这些技巧可能挑战了常规的编程思维,能为程序员带来全新的理解和操作体验。描述中的“耗费了本人大量心血”暗示了作者在深入...

    关于在SQL中抛出异常的写法

    总的来说,熟练掌握在SQL中抛出异常的方法,能显著提升开发质量和效率,尤其是在处理报表这类复杂逻辑时。通过合理使用`RAISERROR`和`THROW`,以及配合`TRY...CATCH`,我们可以更好地控制错误处理,确保程序的稳定性...

    mysql中获取一天、一周、一月时间数据的各种sql语句写法

    在MySQL中,处理时间数据是数据库操作中的常见任务。这篇内容主要探讨了如何使用SQL语句获取一天、一周、一月内的数据。首先,我们创建了一个名为`t`...理解并熟练运用这些函数和操作,将极大地提升数据库管理的效率。

    C#SqlParameter参数写法

    使用`SqlParameter`进行参数化查询是.NET开发中的一个重要概念,它有助于确保数据安全性和提高执行效率。在实际应用中,建议尽可能使用参数化查询代替拼接SQL字符串的方式,尤其是在处理用户输入的情况下。此外,...

    SQL写法—数据修改

    ### SQL写法——数据修改:条件 INSERT ALL 与 INSERT FIRST 在数据库操作中,SQL(Structured Query Language)作为处理关系型数据库的标准语言,其功能强大且应用广泛。本文将详细介绍如何利用Oracle数据库中的...

    泛微系统SQL语句大全

    本资源集合了泛微系统中与SQL Server数据库交互时常用的各种SQL语句,涵盖了组织架构、流程管理以及自定义需求等多个方面。以下是对这些SQL语句知识点的详细解释: 1. **组织架构相关SQL**: - 组织架构是企业信息...

    Oracle Sql高效语句的写法诀窍

    使用绑定变量是提高SQL语句执行效率的关键技术之一。 绑定变量的概念和重要性: 绑定变量是SQL语句中用于代替硬编码的字面值的占位符。它们在SQL语句第一次执行时被赋值,然后存储在数据库的共享池中,供后续相同的...

    sql脚本书写规范

    - 编写测试用例,确保SQL脚本在各种预期和非预期情况下都能正确工作。 - 使用单元测试框架进行自动化测试。 10. **文档**: - 为每个脚本提供详细的使用和部署指南。 - 记录脚本的变更历史,包括更改的原因和...

    10个高级sql写法.pdf

    本文将介绍10个高级SQL写法,这些技巧主要源自MySQL 8.0环境,适用于处理各种业务需求。 1. **ORDER BY FIELD() 自定义排序** 在MySQL中,除了常见的`ASC`和`DESC`用于排序外,`ORDER BY FIELD()`函数允许我们...

    Hibernate中,利用Criteria查询容器实现sql的写法

    在Java的持久化框架Hibernate中,Criteria API是一种用于构建动态查询的强大工具,它允许开发者以对象化的方式构建SQL语句,而无需直接编写SQL代码。本篇将详细讲解如何在Hibernate中利用Criteria查询来实现类似SQL...

    SQL优化的好工具——SQL Expert介绍.pdf

    3. Syntactical SQLOptimizer(语法SQL优化器):该功能可以自动改写SQL语句,以寻找语义相同但执行效率更高的SQL写法。通过分析每一种可能的执行计划,并列举出对应的SQL语句,它能够极大地提高寻找最佳化SQL语句的...

    如何提高SQL查询效率

    ### 如何提高SQL查询效率 ...提高SQL查询效率是一项综合性的技术工作,需要从多个角度出发,结合实际情况灵活运用各种技巧。通过上述方法的应用,可以有效提升查询性能,进而提高整个系统的运行效率。

    多行SQL导入ACCESS事务的代码写法

    ### 多行SQL导入ACCESS事务的代码写法 #### 知识点概述 本文档将详细介绍如何使用ADO(ActiveX Data Objects)技术结合事务处理功能,实现多行数据的高效导入到Microsoft Access数据库中的方法。在开发过程中,...

    sql 书写规范

    "sql 书写规范" SQL 书写规范是为了确保 SQL 代码的可读性、可维护性和性能,以下是 SQL 书写规范的详细说明: ...遵守这些规范可以确保 SQL 代码的可读性、可维护性和性能,从而提高数据库的效率和稳定性。

    sql脚本优化

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

    高性能数据仓库引擎Sybase IQ的SQL写法

    **SQL写法基础** 1. **创建表结构**:在Sybase IQ中,创建表时需要指定列的数据类型、长度和是否允许为空。例如: ```sql CREATE TABLE Sales ( ProductID INT NOT NULL, SaleDate DATE, Quantity SOLDouble, ...

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

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

    SQLTracker oracle跟踪工具

    对于开发人员而言,SQLTracker也能辅助进行代码调试,通过跟踪SQL执行,可以快速定位代码中的问题,提高开发效率。 9. **优化建议** 高级的SQLTracker可能还会提供一些自动化的优化建议,如提示改进索引策略,...

    sql比对工具.zip

    2. 数据比对:除了结构,这些工具还可以对比数据库中的实际数据,找出记录差异,帮助定位潜在的问题。 3. 同步操作:一旦发现差异,工具通常提供一键同步功能,允许用户将更改从一个数据库应用到另一个数据库,支持...

Global site tag (gtag.js) - Google Analytics