北大青鸟APTECH软件工程师培训郑州电脑学校 ---- 郑州北大青鸟欢迎您

>
时间 类型 状态
7 月30日 专修班 热招
7 月25日 专修班 热招
7 月18日 专修班 余7座
7 月12日 专修班 余5座
7 月 6日 商务班 余2座
6 月25日 专修班 已满
6 月15日 专修班 已满
  • 时间:7月5日(本周六)14:00
  • 内容:“E网情深”
  •         “60分钟教你做游戏软件”
  • 主讲:北大青鸟资深金牌讲师
  • 北大青鸟地址:郑州市京广北路三十
            三号院(中原路京广路交叉口
            东北角)
  • 抢座热线:0371-67255555
  • 北大青鸟电话:0371-67255555
  • 教质服务热线:15890063901
  • 就业合作热线:13676985050
  • 风靡世界的品牌
  • 权威的联合认证
  • 深厚的教育背景
  • 多模式教学方法
  • 独特的教育理念
  • 学术专家顾问团
  • 严格的教学管理
  • 先进的教育产品
  • 完善的就业服务
  • 北大青鸟在线咨询
    杜老师
  • 北大青鸟在线咨询
    林老师
  • 北大青鸟在线咨询
    王老师
  • 北大青鸟在线咨询
    李老师
  • 北大青鸟在线咨询
    张老师
  • 北大青鸟在线咨询
    汤老师
  •  在线报名
当前位置:北大青鸟>技术园地>教你快速掌握SQL语句各种写法的效率问题

教你快速掌握SQL语句各种写法的效率问题

来源:北大青鸟 作者:管理员 发布时间:2008-05-05

问题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 ROWCOUNT和TOP 是一样的, 包括执行的计划等都是一样的

问题4:条件判断时:

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

where exists(select * from tb where ……)

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

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

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

问题5: (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的区别?

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

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

问题8:INTERSECT和UNION的区别?

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




上一篇:Oracle数据字典与动态性能表的相关概念   下一篇:教你快速掌握SQL语言中游标的使用技巧