博客
关于我
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/

    你可能感兴趣的文章
    NdkBootPicker 使用与安装指南
    查看>>
    ndk特定版本下载
    查看>>
    NDK编译错误expected specifier-qualifier-list before...
    查看>>
    Neat Stuff to Do in List Controls Using Custom Draw
    查看>>
    Necurs僵尸网络攻击美国金融机构 利用Trickbot银行木马窃取账户信息和欺诈
    查看>>
    Needle in a haystack: efficient storage of billions of photos 【转】
    查看>>
    NeHe OpenGL教程 07 纹理过滤、应用光照
    查看>>
    NeHe OpenGL教程 第四十四课:3D光晕
    查看>>
    Neighbor2Neighbor 开源项目教程
    查看>>
    neo4j图形数据库Java应用
    查看>>
    Neo4j图数据库_web页面关闭登录实现免登陆访问_常用的cypher语句_删除_查询_创建关系图谱---Neo4j图数据库工作笔记0013
    查看>>
    Neo4j图数据库的介绍_图数据库结构_节点_关系_属性_数据---Neo4j图数据库工作笔记0001
    查看>>
    Neo4j图数据库的数据模型_包括节点_属性_数据_关系---Neo4j图数据库工作笔记0002
    查看>>
    Neo4j安装部署及使用
    查看>>
    Neo4j电影关系图Cypher
    查看>>
    Neo4j的安装与使用
    查看>>
    Neo4j(1):图数据库Neo4j介绍
    查看>>
    Neo4j(2):环境搭建
    查看>>
    Neo4j(3):Neo4j Desktop安装
    查看>>
    Neo4j(4):Neo4j - CQL使用
    查看>>