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 Server 2008 中的更改跟踪与变更数据捕获

1                概述1.1        更改跟踪1.2        变更数据捕获1.3        比较更改跟踪和变更数据捕获2                使用2.1   ...
  • zjcxc
  • zjcxc
  • 2009年03月10日 11:02
  • 14049

初步了解更新锁(U)与排它锁(X)

一直没有认真觉察UPDATE操作的锁,最近在MSDN上看到一个问题,询问堆表更新的死锁问题,问题很简单,有类似这样的表及数据:CREATE TABLE dbo.tb(     c1 int,     ...
  • zjcxc
  • zjcxc
  • 2014年05月28日 17:13
  • 10525

android自定义Adapter中getView()三种写法及其效率问题。

android中常常需要我们自定义Adapter,甚至经常建一个包专门放各种自定义adapter类。常见的有ListView继承自BaseAdapter的adapter、ExpandableListV...

SQL中EXISTS与IN的效率问题

一起学习一下; 有两个简单例子,以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where...

oracle的SQL语句执行效率问题查找与解决方法

1.   利用V_$SQLAREA视图提供了执行的细节。(执行、读取磁盘和读取缓冲区的次数)•    数据列EXECUTIONS:执行次数DISK_READS:读盘次数COMMAND_TYPE:命令类...

Sql中EXISTS与IN的效率问题

根据两张表大小不同选择EXSIST、IN

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

绑定参数的sql优化。避免sql层面进行参数运算。

SQL里的EXISTS与in、not exists与not in 效率问题

SQL里的EXISTS与in、not exists与not in(转载)_GG   2009-06-28 16:18:05|  分类: Oracle|举报|字号 订阅 ...

SQL语句效率问题的几点总结

1. SQL优化的原则是:   将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。      调整不良SQL通常可以从以下几点切入:      检查不良的SQL,考虑...

快速排序的三种写法的效率比较

最近在复习排序和查找算法的时候,回想算法课程和数据结构课程上面各种写法,总结一下,顺便比较了一下它们之间的效率,   另《外数据结构》书本上阐述,如果比较的枢纽值不是第一个或者最后一个而是 a[l...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL各种写法的效率问题
举报原因:
原因补充:

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