博客
关于我
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流程控制结构,if函数、case结构、if结构、循环结构
    查看>>
    mysql添加用户
    查看>>
    MySQL添加用户、删除用户与授权
    查看>>
    Mysql添加用户并授予只能查询权限
    查看>>
    mysql添加用户权限报1064 - You have an error in your SQL syntax问题解决
    查看>>
    mysql添加索引
    查看>>
    mysql添加表注释、字段注释、查看与修改注释
    查看>>
    mysql源码安装
    查看>>
    Mysql源码安装过程中可能碰到的问题
    查看>>
    MySQL灵魂16问,你能撑到第几问?
    查看>>
    MySQL灵魂拷问:36题带你面试通关
    查看>>
    mysql状态分析之show global status
    查看>>
    mysql状态查看 QPS/TPS/缓存命中率查看
    查看>>
    mysql生成树形数据_mysql 实现树形的遍历
    查看>>
    mysql用于检索的关键字_Mysql全文搜索match...against的用法
    查看>>
    MySQL用得好好的,为什么要转ES?
    查看>>
    MySql用户以及权限的管理。
    查看>>
    MySQL用户权限配置:精细控制和远程访问的艺术!------文章最后有惊喜哦。
    查看>>
    mysql用户管理、常用语句、数据分备份恢复
    查看>>
    MySQL留疑问:left join时选on还是where?
    查看>>