博客
关于我
MySQL多表关联on和where速度对比实测谁更快
阅读量:799 次
发布时间: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/

    你可能感兴趣的文章
    Nat、端口映射、内网穿透有什么区别?
    查看>>
    Nat、端口映射、内网穿透有什么区别?
    查看>>
    nat打洞原理和实现
    查看>>
    NAT技术
    查看>>
    NAT模式/路由模式/全路由模式 (转)
    查看>>
    NAT模式下虚拟机centOs和主机ping不通解决方法
    查看>>
    NAT的两种模式SNAT和DNAT,到底有啥区别?
    查看>>
    NAT的全然分析及其UDP穿透的全然解决方式
    查看>>
    NAT类型与NAT模型详解
    查看>>
    NAT网络地址转换配置实战
    查看>>
    NAT网络地址转换配置详解
    查看>>
    navbar navbar-inverse 导航条设置颜色
    查看>>
    Navicat for MySQL 命令列 执行SQL语句 历史日志
    查看>>
    Navicat for MySQL 查看BLOB字段内容
    查看>>
    Navicat for MySQL笔记1
    查看>>
    Navicat for MySQL(Ubuntu)过期解决方法
    查看>>
    Navicat Premium 12 卸载和注册表的删除
    查看>>
    Navicat 导入sql文件
    查看>>
    navicat 添加外键1215错误
    查看>>
    navicat 系列软件一点击菜单栏就闪退
    查看>>