扫码阅读
手机扫码阅读

MySQL 多表联合查询有何讲究?

78 2024-11-28

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:MySQL 多表联合查询有何讲究?
文章来源:
江南一点雨
扫码关注公众号

微信中多表联合查询:小表驱动大表还是大表驱动小表?

1. in VS exists

对于微信中的多表联合查询,讨论了使用in和exists关键字的区别。以员工表和部门表为例,在查询技术部所有员工时,使用in关键字先查询部门表再查询员工表,利用索引效率较高,体现了小表驱动大表。而使用exists关键字则先扫描员工表再匹配部门表,这种大表驱动小表的方式效率较低。因此,当部门表的数据量小于员工表时,建议使用in关键字以实现小表驱动大表,以提高查询效率。

2. 为什么要小表驱动大表

在MySQL中进行多表联合查询时,小表驱动大表的效率更高。这是因为驱动表的数据会作为基础去匹配被驱动表的记录,当小表作为驱动表时,需要的匹配次数较少,且由于索引的存在,搜索速度更快。例如,以100个部门去匹配10000个员工的情况与其相反的情况相比,前者的查找总次数明显较少。

3. 没有索引咋办?

如果驱动表和被驱动表之间的关联字段没有索引,MySQL会使用Block Nested-Loop Join算法。该算法通过将驱动表数据读入内存的join_buffer中,并与被驱动表逐行对比,来找出满足条件的结果。当没有索引时,大表驱动小表和小表驱动大表的差别不大。但如果join_buffer大小有限,仍然建议小表驱动大表,因为这样可以减少读取的次数。尽管如此,没有索引的多表联合查询效率通常较低,应尽量避免。

总的来说,在进行多表联合查询时,推荐使用小表驱动大表的方式,以提高查询效率。

想要了解更多内容?

查看原文:MySQL 多表联合查询有何讲究?
文章来源:
江南一点雨
扫码关注公众号