• SQL中的连接查询及其优化原则


      连接查询是SQL的主要任务,只有很好的掌握了连接查询及其优化方法才算是掌握了SQL的精髓所在。最近在面试中遇到了有关连接查询的问题,感觉回答的不是很好,总结一下。

    具体示例请参考:http://www.w3school.com.cn/sql/sql_join.asp

    总结:

    连接查询原理与代码优化:假如要对table1和table2两个表进行连接查询,则DBMS首先会在table1中找到第一个元组,然后从头开始扫描table2表,逐一查找与table1第一个元组相对应的table2的元组,找到后就将table1的第一个元组和table2的第二个元组拼接起来,如果将table2扫描了一遍也没有找到,则开始匹配table1的第二个元组。直到table1也扫描完毕。返回查询到的连接表。通过连接查询的原理可以清楚,两个表的连接查询就是一个两层循环,如果table1的记录数为m,table2的记录数为n的话那么进行一次连接查询的时间复杂度应该是O(m*n)。可见连接查询是非常耗时的,如果表的记录数非常庞大查询效率就会变的很低。所以在写SQL语句特别是复杂的连接查询就要在代码层面对查询进行优化,优化的原则是把连接操作尽量放在最后,尽可能的把单表查询、选择操作放在前面这样就会在一定程度上减少连接查询表的记录数,提高执行效率。DBMS本身也会对SQL语句进行优化。

    内连接、左外链接、右外链接:

    inner join=join 可以理解为自然连接,是最常用的一种连接查询,返回匹配的行(至少有一个匹配才会返回)。

    out join一般有left out join和right out join是和inner join相对的一种连接查询,其中left out join是指左边的表全部返回如果有对应的右边表的行则连接起来返回,否则设置为null。而right out join则相反。参考上面连接中的具体示例就很容易明白。

  • 相关阅读:
    ADO.NET初学习
    phpstorm+xdeubg debugging 9000 is busy 提示端口不可以的处理办法
    mysql 乐观锁和悲观锁
    Laravel Facade 调用流程源码分析
    利用 反射ReflectionClass来查看里面的属性和方法
    PHP ArrayAccess 接口简单实例
    laravel service provider 简单实例
    从github 下载下来的PHP项目代码本地需要怎么部署
    PHP Closure 类的bind简介和使用
    PHP $this,self,static 的区别
  • 原文地址:https://www.cnblogs.com/wxisme/p/5405908.html
Copyright © 2020-2023  润新知