SQL的嵌套查询与连接查询
与的性能
连接查询⼀般较快;很难被优化。(当然和DB优化有关,也可能⼦查询⽐连接查询快)其实不能⼀概⽽论的~~ 不过,问了下DBA同学,他建议是能⽤的,尽量不要⽤嵌套查询。以下内容,部分是来⾃⽹上的⼀些观点,⾃⼰稍加整理的。
⼦查询是实现关联式计算的⼀种实例,连接实现了关联式代数。关于关联式计算(relational calculus)和关联式代数(relational algebra),貌似⽐较数学或者理论性的东西理论,我也还没深⼊弄明⽩。join和in哪个查询更快
很多⼈也说到,这个性能的⽐较,不能⼀概⽽论的,需要具体的每个Case具体分析。
也有⼈说(并有在某种DBMS上⽤⼀个例⼦证明),⼦查询可以也可能被优化为与join⼀样的执⾏计划,性能可以⼀样的。
说⼀下概念吧:在⼀个SELECT语句的WHERE⼦句或HAVING⼦句中嵌套另⼀个SELECT语句的查询称为嵌套查询,⼜称⼦查询。⼀个Where查询语句块可以嵌套在另⼀个Where查询块的Where⼦句中,称为嵌套查询。外层查询称为⽗查询,主查询。内层查询称为⼦查询,从查询。⼦查询可以嵌套多层,⼦查询查询到的结果⼜成为⽗查询的条件。⼦查询中不能
有order by分组语句。先处理⼦查询,再处理⽗查询。⼦查询除⾮能确保内层select只返回⼀个⾏的值,否则应在外层where⼦句中⽤⼀个in限定符,即要返回多个值,要⽤in或者not in哦,所以当在编译过程中出现“⼦查询只返回⼀个值”的错误时,就要考虑是不是要⽤in和not in.
MySQL从4.1版本开始⽀持⼦查询,使⽤⼦查询进⾏SELECT语句嵌套查询,可以⼀次完成很多逻辑上需要多个步骤才能完成的SQL操作。⼦查询虽然很灵活,但是执⾏效率并不⾼。执⾏⼦查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,⼦查询的速度会受到⼀定的影响,这⾥多了⼀个创建和销毁临时表的过程。优化⽅式:可以使⽤连接查询(JOIN)代替⼦查询,连接查询不需要建⽴临时表,因此其速度⽐⼦查询快。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论