Good Coding Practices

上一篇 / 下一篇  2009-07-31 09:52:07 / 个人分类:SQL相关

SelectHabits

避免使用‘Select *
               1.
如果表定义改了,程序可能会失败

               2.额外的列会使处理时间跟过程缓存增加

Select Into VS Insert with subquery

   InsertT-sql中常用语句,Insert INTO table(field1,field2,...)values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTOINSERT INTO SELECT表复制语句了

1. INSERT INTO SELECT语句

      语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

     要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入 

     常量。

2. SELECT INTO FROM语句

 语句形式为:SELECT vale1, value2 into Table2 from Table1

 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。

COUNT效率

使用count(*)而不是count(列名)

   1. count(列名)检查每一个值看是否为NULL以判定它是否应该包含在count中。

2.当然这种用法是有限定的,比方在有外联接的情况下,一般不能用count(*)而用count(列名)

Exists vs COUNT

IF (select count(*) from titles 

     where type = ‘mod’) > 0

     print ‘We have …’

Exists而不是count

 

 

 

 

 

IF EXISTS( select * from titles

                  Where type = ‘mod’)

                  Print ‘we have …’

能被重写为

 

 

 

 

COUNT使SQL Server计算所有匹配的值,这可能导致表扫描。Exists在找到第一个匹配的值时就停止。

 

exists()后面的子查询被称做相关子查询他是不返回列表的值的.只是返回一个truefalse的结果(这也是为什么子查询里是"select1"的原因,换成"select 6"完全一样,当然也可以select字段,但是明显效率低些)
其运行方式是先运行主查询一次再去子查询里查询与其对应的结果如果是true则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询.

in()后面的子查询是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.

UNIONUNION ALL

1. UNION总是创建worktable

2. UNION为所有行排序来判定是否有重复的数据

3. UNION ALL仅仅将两个SELECT的结果发送

4. 在没有重复行时,UNION ALL是最合适的

The relational engine may need to build aworktableto perform. a logical operation specified in an SQL statement. Worktables are typically generated for certainGROUP BY,ORDER BY, orUNIONqueries. For example, if an ORDER BY clause references columns not covered by any indexes, the relational engine may need to generate a worktable to sort the result set into the order requested.

Worktables are built intempdband are dropped automatically at the end of the statement.

 

 

 

 

 

 

 

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar