SQL各种写法的效率问题

转载 2007年09月14日 10:28:00

经常可以遇到这种情况:用不同的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')
_________________________________
上面两种方法,哪种方法效率高?

(2)赋值时:
SELECT @a=N'aa'
SET @a=N'aa'
_________________________________
上面两种方法,哪种方法效率高?

(3)取前几条数据时
set ROWCOUNT 2 select * from tb order by fd
select Top 2 * from tb order by fd
_________________________________
上面两种方法,哪种方法效率高?

(4)条件判断时
 where 0<(select count(*) from tb where ……)
 where exists(select * from tb where ……)
_________________________________
上面两种方法,哪种方法效率高?

(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)EXCEPT和Not in的区别?

(8)INTERSECT和UNION的区别?
下面是邹老大的回答:


(1)一次插入多条数据时:

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


2. 如果是单个赋值, 没有什么好比较的话.
不过, 如果是为多个变量赋值, 我测试过, SELECT 一次性赋值, 比用SET 逐个赋值效率好.


3. SET ROWCOUNT和TOP 是一样的, 包括执行的计划等都是一样的

4. 这个一般是exists快, 当然, 具体还要看你后面的子查询的条件, 是否会引用外层查询中的对象的列.
   exists检查到有值就返回, 而且不返回结果集, count需要统计出所有满足条件的, 再返回一个结果集, 所以一般情况下exists快.

5. 应该是一样的


6. 基本上是一样的

7. except会去重复, not in 不会(除非你在select中显式指定)
   except用于比较的列是所有列, 除非写子查询限制列, not in 没有这种情况
8. intersect是两个查询都有的非重复值(交集), union是两个查询结果的所有不重复值(并集)
 

 

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

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

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

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

Mysql 优化——分析表读写和sql效率问题

上次我们说到mysql的一些sql查询方面的优化,包括查看explain执行计划,分析索引等等。  今天我们分享一些 分析mysql表读写、索引等等操作的sql语句。闲话不多说,直接上代码:-- 反映...

Sql中EXISTS与IN的效率问题

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

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

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

High Water Mark导致的SQL效率问题

High Water Mark导致的SQL效率问题

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,考虑...

SQL中EXISTS与IN的效率问题

一起学习一下; 有两个简单例子,以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL各种写法的效率问题
举报原因:
原因补充:

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