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

    _________________________________

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

    答:

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

    CSDN上对应的帖子

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

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ChaoYang0502/archive/2009/04/17/4087222.aspx

  • 相关阅读:
    document.body.appendChild 的问题
    页面不刷新,表单提交到弹出窗口或Iframe
    您对无法重新创建的表进行了更改或者启用了 阻止保存要求创建表的更改
    转载:兼容各类浏览器的CSS Hack技巧
    sql server 代理权限问题
    配置SQL用户访问指定表,指定列
    关于嵌入式系统的启动(装载)
    centos 中安装g++
    嵌入式中利用ftp实现宿主机与目标机通信
    TQ2440加载Hello world驱动模块
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1531355.html
Copyright © 2020-2023  润新知