SQL各种写法的效率问题

原创 2006年07月15日 21:40:00

问:

(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')

_________________________________

上面两种方法,哪种方法效率高?

答:

1种好一些, 但也得有个量的控制, 因为第1种的union all是作为一个语句整体, 查询优化器会尝试做优化, 同时, 也要先算出这个结果再插入的.

 

 

问:

(2)赋值时:

SELECT @a=N'aa'

SET @a=N'aa'

_________________________________

上面两种方法,哪种方法效率高?

答:

如果是单个赋值, 没有什么好比较的话.

不过, 如果是为多个变量赋值, 经测试, SELECT 一次性赋值, 比用SET 逐个赋值效率好..

 

 

问:

(3)取前几条数据时

set ROWCOUNT 2 select * from tb order by fd

select Top 2 * from tb order by fd

_________________________________

上面两种方法,哪种方法效率高?

答:

SET ROWCOUNTTOP 是一样的, 包括执行的计划等都是一样的

 

 

问:

(4)条件判断时

 where 0<(select count(*) from tb where ……)

 where exists(select * from tb where ……)

_________________________________

上面两种方法,哪种方法效率高?

答:

这个一般是exists, 当然, 具体还要看你后面的子查询的条件, 是否会引用外层查询中的对象的列.

exists检查到有值就返回, 而且不返回结果集, count需要统计出所有满足条件的, 再返回一个结果集, 所以一般情况下exists.

 

 

问:

(5)NULLIF的使用----->同理它的反函数ISNULL的使用

update tb set fd=case when fd=1 then null else fd end

update tb set fd=nullif(fd,1)

_________________________________

上面两种方法,哪种方法效率高?

答:

应该是一样的

 

 

问:

6)从字符串中取子字符串时

substring('abcdefg',1,3)

left('abcderg',3)_

________________________________

上面两种方法,哪种方法效率高?

答:

基本上是一样的

 

 

问:

(7)EXCEPTNot in的区别?

答:

except会去重复, not in 不会(除非你在select中显式指定)

except用于比较的列是所有列, 除非写子查询限制列, not in 没有这种情况

 

 

问:

(8)INTERSECTUNION的区别?

答:

intersect是两个查询都有的非重复值(交集), union是两个查询结果的所有不重复值(并集)

 

CSDN上对应的帖子

http://community.csdn.net/Expert/topic/4867/4867641.xml?temp=.8817865

 

SQL语句执行效率及分析

 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 20...
  • Liu_jinchun
  • Liu_jinchun
  • 2017年01月03日 15:04
  • 1941

ORACLE-017:SQL优化-is not null和nvl

今天在优化一段sql,原脚本大致如下:select a.字段n from tab_a a where a.字段2 is not null;a.字段2增加了索引的,但是查询速度非常慢,于是...
  • yysyangyangyangshan
  • yysyangyangyangshan
  • 2015年08月25日 10:21
  • 5928

SQL SERVER ISNULL 和NULLIF 以及ISNULL 和IS NULL 的区别

SQL Server里的 ISNULL 与 ASP 中的 IsNull不同,SQL Server 中有两个参数,语法: ISNULL(check_expression, replacement_va...
  • tianlianchao1982
  • tianlianchao1982
  • 2012年03月14日 10:49
  • 1269

SQL中EXCEPT和Not in的区别?

初始化两张表:CREATE TABLE tb1(ID int) INSERT tb1          SELECT NULLUNION  ALL          SELECT NULLUNION ...
  • ocan
  • ocan
  • 2007年06月21日 08:59
  • 12226

sql优化-分页查询效率慢的问题分析及处理

绑定参数的sql优化。避免sql层面进行参数运算。
  • duwenchao1986
  • duwenchao1986
  • 2015年07月28日 10:59
  • 2711

sql查询执行效率

Sql查询执行效率 转自:http://boyd.cn/info_Print.asp?ArticleID=3822  sql查询执行效率条件中最好不要使用OR 或IN ) 1.有索引的列...
  • weidawei0609
  • weidawei0609
  • 2012年07月10日 14:44
  • 354

SQL Server查询优化方法(查询速度慢的原因很多,常见如下几种)

在开发的朋友特别是和mysql有接触的朋友会碰到有时mysql查询很慢,当然我指的是大数据量百万千万级了,不是几十条了,下面我们来看看解决查询慢的办法。   MySQL查询优化:查询慢原因和解决方法 ...
  • ss19871028
  • ss19871028
  • 2017年02月06日 14:51
  • 1388

SQL各种写法的效率问题

(1)一次插入多条数据时:CREATE TABLE tb(ID int, 名称 NVARCHAR(30), 备注 NVARCHAR(1000))INSERT tb   SELECT 1,DDD,1UN...
  • killer000777
  • killer000777
  • 2006年12月20日 21:27
  • 811

SQL各种写法的效率问题

问:(1)一次插入多条数据时:CREATE TABLE tb(ID int, 名称 NVARCHAR(30), 备注 NVARCHAR(1000))INSERT tb   SELECT 1,DDD,1...
  • softstars
  • softstars
  • 2008年01月03日 14:39
  • 199

总结SQL查询慢的50个原因

查询速度慢的原因很多,本文总结SQL查询慢的50个原因:   1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)   2、I/O吞吐量小,形成了瓶颈效应。   3、没有创建...
  • coderjiang
  • coderjiang
  • 2016年03月18日 09:22
  • 351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL各种写法的效率问题
举报原因:
原因补充:

(最多只允许输入30个字)