博客
关于我
MySQL多表关联on和where速度对比实测谁更快
阅读量:798 次
发布时间:2023-02-12

本文共 897 字,大约阅读时间需要 2 分钟。

MySQL多表关联on和where速度对比实测

背景

最近在技术讨论群中发现一个有趣的话题:在MySQL中,当我们需要通过特定字段对两张数据表进行关联时,使用ON还是WHERE更高效?为了彻底解决这个问题,我们决定亲自来做一个实测。

先说结论

通过大量测试数据,我们发现以下结论:

  • 对等查询ONWHERE 的速度基本一致,差异可忽略不计。
  • 不对等查询:在存在大量不等记录的情况下,WHERE 查询效率会更高。

数据集准备

为了保证测试的科学性,我们准备了以下数据集:

  • member表:存储了20万条记录,字段包括member_idclass_id等。
  • member_class表:同样存储了20万条记录,字段包括idclass_name等。
  • member_v2表:与member_class表类似,但class_id字段只有20%与member_class.id存在对应关系。
  • 对全表的查询测试

    我们分别对两张表执行了全表联接查询,分别测试WHEREON的性能。为了确保结果的准确性,每条查询结果都重复测试了20次。

    • WHERE查询:平均耗时为0.2557秒。
    • ON查询:平均耗时为0.2498秒。两者速度基本一致,差异极为微小。

    存在不等记录的查询测试

    为了测试不对等记录的场景,我们创建了一个新的表member_v2,其中class_id字段只有20%与member_class.id存在对应关系。我们再次执行全表联接查询。

    • WHERE查询:由于WHERE语句能够自动过滤不等记录,查询效率保持较高,平均耗时为0.2557秒。
    • ON查询:由于ON语句会强制生成不等记录(通过左连接),这会导致中间表查询效率下降,平均耗时为0.2498秒。可以看出,在存在大量不等记录的情况下,WHERE查询更高效。

    结论

    通过以上测试,我们得出以下结论:

    • 在对等查询场景下,ONWHERE的速度基本一致。
    • 在不对等查询场景下,WHERE查询效率更高。

    这种情况下,WHERE的优势在于能够自动过滤不等记录,从而提高查询效率。而ON在处理对等记录时表现更优,但在存在不等记录时则显得不够理想。

    转载地址:http://nebfk.baihongyu.com/

    你可能感兴趣的文章
    mysql长事务
    查看>>
    mysql问题记录
    查看>>
    mysql间隙锁
    查看>>
    MySQL集群解决方案(1):MySQL数据库的集群方案
    查看>>
    MySQL集群解决方案(2):主从复制架构
    查看>>
    MySQL集群解决方案(4):负载均衡
    查看>>
    MySQL集群解决方案(5):PXC集群
    查看>>
    MySQL面试宝典
    查看>>
    WAP短信:融合传统短信和互联网的新型通信方式
    查看>>
    mysql面试题学校三表查询_mysql三表查询分组后取每组最大值,mysql面试题。
    查看>>
    Mysql面试题精选
    查看>>
    MySQL面试题集锦
    查看>>
    mysql面试题,存储引擎InnoDB和MyISAM
    查看>>
    mysql面试题:为什么MySQL单表不能超过2000W条数据?
    查看>>
    mysql面试题:创建索引时会不会锁表?
    查看>>
    mysql面试题:高度为3的B+树可以存放多少数据?
    查看>>
    mysql颠覆实战笔记(八)--mysql的自定义异常处理怎么破
    查看>>
    mysql驱动、durid、mybatis之间的关系
    查看>>
    mysql驱动支持中文_mysql 驱动包-Go语言中文社区
    查看>>
    MySQL高可用之——keepalived+互为主从
    查看>>