欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

请问两个sql语句不同cost的原因

更新时间: 2014-01-05 02:12:18 责任编辑: Author_N1

 

请教两个SQL语句不同Cost的原因

--参考方法--
一般情况下:
有两个表:TABLE_A,TABLE_B
SELECT * FROM TABLE_A A WHERE A.ID IN (SELECT B.ID FROM TABLE_B)

in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录。IN这种情况适合TABLE_B表比TABLE_A表数据小的情况。
SELECT * FROM TABLE_A A where exists (SELECT 1 FORM TABLE_B B WHERE B.ID = A.ID)

exists()会执行TABLE_A.length次,它并不缓存exists()结果集,因为exists()结果集的内容并不重要,重要的是结果集中是否有记录,如果有则返回true,没有则返回false。exists()适合TABLE_B表比TABLE_A表数据大的情况。
--参考方法--
上面子查询里面利用了关联子查询

关联子查询的说法:在关联子查询中,对于外部查询返回的每一行数据,内部查询都要执行一次。另外,在关联子查询中是信息流是双向的。外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录。然后,外部查询根据返回的记录做出决策。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:12:18
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6929/
本文WWW.DOC100.NET DOC100.NET版权所有。