摘要: A:In:是把外表和内表做Hash 连接,而exists 是对外表作loop 循环,每次loop循环再对内表进行查询。当查询两个表的大小相当时,用In 和 exists差别不大。如果两个表中一个表较小,一个表较大,那么子查询表大的用exists,子查询表小的用In,效率会高的。也就是说 IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况,这样效率会高的例如 :表a(小表),表b(大表)1.select * from a where aid in (select aid fromb) --->效率低:全程扫描b表,用到a 表上的aid的索引,因为a表小,b表大上面in的 阅读全文
posted @ 2014-02-19 15:24 想静一下 阅读(8561) 评论(2) 推荐(2) 编辑
摘要: ---创建表aIf exists(select * from sysobject where [name]=='a' and xType = 'u')Begin Drop table aaEndBegin Create table aa (id int, cplpdid int, [name] nchar(50), Constraint pk_id Primary key Clustered(id),) Insert into aa select 1,3,'s' union all select 2,4,"w" union a 阅读全文
posted @ 2014-02-19 15:19 想静一下 阅读(161) 评论(0) 推荐(0) 编辑
摘要: A:In:是把外表和内表做Hash 连接,而exists 是对外表作loop 循环,每次loop循环再对内表进行查询。当查询两个表的大小相当时,用In 和 exists差别不大。如果两个表中一个表较小,一个表较大,那么子查询表大的用exists,子查询表小的用In,效率会高的。也就是说 IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况,这样效率会高的例如 :表a(小表),表b(大表)1.select * from a where aid in (select aid fromb) --->效率低:全程扫描b表,用到a 表上的aid的索引,因为a表小,b表大上面in的 阅读全文
posted @ 2014-02-19 15:06 想静一下 阅读(334) 评论(0) 推荐(0) 编辑