zoukankan      html  css  js  c++  java
  • Mysql查询

    自然连接查询

    通过上面的图我们注意到,自然连接的语法是JOIN  ON,as 后面就是对应表和字段的别名,JOIN后面是连接的表,ON后面是连接的条件。

    我们查询的数据量是16000条,我们使用表的引擎是MYISAM。

    我们来看这次查询的时间是:4.527ms(这个查询是简单查询,没有加索引)

    我们给ON条件的字段加索引,查询的时间是:3.507ms

    我们在后面建立了一个复合索引

    我们再看另一个场景,只出现staff_id和rental_id情景:

     

    查询时间是:3.219ms

    我们现在把三个字段都加上

    查询的时间是:1.954ms

    为什么会这么神奇,代码就相差一个字段,查询的时间差就很大呢?我来解释一下:我们创建的复合索引,如果让索引生效就要从左向右一次出现对应的字段,不能有空,比如123,你写的是13中间隔了一个,索引就失效。还有一种情况12索引也是生效。因为索引没有生效才会出现这种情况。

    我们来看一下子查询

    所用时间:7.126ms

    把他转化成自然连接

    所用时间:1.160ms

     总结:

    1、我们要给自然连接查ON后面的字段加索引来提高查询的效率,注意如果是复合索引,那么我们查询字段顺序一定是按照复合索引从左向右的顺序。

    2、我们对比了子查询和自然连接查询,他们相差还是很大的,优化的办法就是我们把子查询转换成自然连接查询。

    3、自然连接查询多的时候一定要要给表和字段起别名,为了方便后面查询。如果不这样做就是表名加字段,太长了。SQl语句看起来很乱。

     左连接查询

    我们来看查询的效果

    这个时候我们会发现,其他的列为空,这是为什么?因为左连接查询是以左表为主,左表有的信息全部查出来,没有就由空代表;

    左表的字段

    右表的字段

    这个时候我们发现,左表有的值,右表没有,这个时候我们是左表为主,所以查不到的就以空代替。

     我们来看查询

    查询的时间:2.470ms(不加索引)

    加索引的查询时间:1.160ms

    总结:

    1、左连接查询是以左表为主,如果右表没有的数据就用空代替;

    2、在ON子句后面的字段加上索引,可以提高查询的效率;

    右连接查询

    左表字段(没有customer_id = 3的值)

    右表字段:

    总结:

    1、右连接查询以右表为主,左表没有的值,就用空代替。

    2、在ON后面的字段加上索引提高查询的效率;

    联合查询

    将两次查询的结果合并在一起。

    我们再看一种场景,将两个查询的条件写成一样:

    会将查询结果一样的合并在一起;

    Union ALL

    是不会合并一样的结果

    总结:

    1、联合查询就是将几个查询的结果合并在一起;

    2、union查询会将查询结果一样的合并在一起,而union all是不会合并的;

    3、union all的效率要比union的高,主要原因是union去重浪费一定的性能。

  • 相关阅读:
    子元素过滤器nth-child解释
    jquery属性选择器中|value和^value的区别
    [转]float,double和decimal类型
    postsharp初体验
    [札记]IL经典指令解析之方法调度
    Oracle问题诊断过程常用SQL
    在chrome浏览器中 页面生成二维码
    音视频实例
    html5 新增input类型与属性
    html5 form-Validity验证函数
  • 原文地址:https://www.cnblogs.com/liliuguang/p/9167890.html
Copyright © 2011-2022 走看看