中国网格虚拟主机不满意退款承诺!
24小时咨询热线:021-51095771  51087627
中国网格
快速建站 只选网格
域名+空间+数据库+维护 企业网站整体服务商
支付方式数 据 库优惠套餐
您当前的位置 
首页
快速建站
技术
MSSQL
正文

MSSQL各种写法的效率问题

发布时间:2012-10-23 15:46:37| www.cnwg.cn | 文章标签:MSSQL,效率

经常可以遇到这种情况:用不同的SQL写法可以达到同样的目的。爱钻牛角尖的人就想搞明白,诚然结果一样,但到底孰优孰劣?下面是我列出的一些,请兄弟们赐教。也请兄弟们将你们遇到的类似问题一并列出。

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

CREATE TABLE tb(ID int, 名称 NVARCHAR(30), 备注 NVARCHAR(1000))

INSERT tbSELECT 1,'DDD',1

UNIONALLSELECT 1,'5100','D'

UNIONALLSELECT 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是两个查询结果的所有不重复值(并集)


数据库空间

数据库存储空间

价格:200元/100M

MySql,SQL可选择

参考资料

我要评价

评价发表成功

错误提示
关于网格 | 联系方式 | 网站地图 | 客户中心 | 网格招聘 | 代理合作 | 支付方式 | 帮助中心
中国网格所属上海羽灿计算机科技有限公司版权所有 Copyright©cnwg.cn 2003-2013,All Rights Reserved.

联系电话:021-51095771 021-51087627 传真:021-51087637-202
版权所有:上海羽灿计算机科技有限公司 中国网格(cnwg.cn/cnwg.cc)©2003-2013 All Rights Reserved.
地址:上海市银都路3399弄533号 邮编:201108 ICP经营许可证编号:沪B2-20060019 沪ICP备06012189号

  • 经营性网站
    备案信息
  • 网络110
    报警服务
  • 文明办网
    先进单位
  • 支付宝
    特约商家
  • 网络社区
    征信网
  • 上海工商
    网上亮照