2024年4月21日发(作者:)

SET NOCOUNT ON, SET NOCOUNT OFF

当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行

数)。当 SET NOCOUNT 为 OFF 时,返回计数。

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了

网络流量,因此可显著提高性能。

SQL中IN和EXISTS用法的区别

NOT IN

SELECT DISTINCT MD001 FROM BOMMD WHERE MD001 NOT IN (SELECT

MC001 FROM BOMMC)

NOT EXISTS,exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,

需要用索引,这样就可以加快速度

select DISTINCT MD001 from BOMMD WHERE NOT EXISTS (SELECT MC001

FROM BOMMC where 001 = 001)

exists是用来判断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则

返回假。not exists则相反。

exists做为where 条件时,是先对where 前的主查询询进行查询,然后用主查询

的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,

否则不输出。

in和exists

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环

再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。

如果查询的两个表大小相当,那么用in和exists差别不大。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)

效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B

where cc=)

效率高,用到了B表上cc列的索引。

相反的2:select * from B where cc in (select cc from A)

效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A

where cc=)

效率低,用到了A表上cc列的索引。

not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有