往往开发的实际问题和面试理论中的八股文并不一致。
导致明明有很多年的开发经验,但是一遇到面试就凉凉,就比如这道题。
对于MySQL而言,不推荐使用子查询和JOIN语句,因为JOIN的效率较低。
1. 当数据量很大时,很难保证效率。强烈建议先从单表中获取数据,然后在程序中进行JOIN和合并数据。
2. 子查询的效率更低,执行子查询时,MySQL需要创建临时表,并在查询结束后删除这些临时表,因此子查询的速度会受到影响。
3. 如果使用JOIN,它将使用嵌套查询。小表驱动大表,并通过索引字段进行关联。如果表中的记录较少,这样做是可以的。但对于大表来说,可以在业务逻辑中进行控制处理。
4. 数据库通常是瓶颈,建议将数据库仅作为数据存储工具,而不要将业务逻辑添加到其中。
先来说说JOIN查询的好处:
是的,在数据规模没有达到上百万级别的情况下,join查询尤其一定的作用。
-
数据关联:
join查询可以将多个表中的数据关联起来,使得我们可以根据共同的列值获取相关联的数据。这样可以方便地获取需要的信息,而不需要手动进行多次查询和数据处理。
-
数据一致性:
通过join查询,我们可以确保关联的数据是一致的。例如,如果我们需要获取订单表和客户表中的信息,通过join查询可以确保只返回订单表中存在对应客户的订单,避免了数据不一致的情况。
-
查询效率:
在某些情况下,使用join查询可以提高查询效率。通过将多个表连接起来,可以减少查询的次数,避免了多次查询和数据传输的开销。此外,数据库系统可以通过优化join查询的执行计划来提高查询效率。
-
代码简洁性:
使用join查询可以简化代码逻辑。相比于手动进行多次查询和数据处理,使用join查询可以将多个查询合并为一次查询,减少了代码的复杂性和冗余。
需要注意的是,join查询也有一些限制和注意事项。
例如,如果关联的表数据量很大,可能会导致查询性能下降。
不推荐使用JOIN的原因包括:
1. 数据库承担的业务压力较大,应尽量减少负担。当表的记录数达到百万级别时,JOIN会导致性能下降。
2. 在分布式的分库分表环境中,不建议进行跨库JOIN。目前MySQL的分布式中间件对跨库JOIN的支持不好。
3. 修改表的结构时,单表查询的修改相对容易,而JOIN语句的修改较为困难,成本较高。当系统较大时,难以维护。
不使用JOIN的解决方法:
1. 是在业务层,先查询单个表的数据,然后将其作为条件给下一个单表查询。
但需要注意查询的结果集可能会很大。MySQL没有对IN()的数量进行限制,但限制了整条SQL语句的大小。
可以通过调整参数max_allowed_packet来修改一条SQL的最大值。建议在业务上进行合理处理,限制一次查询的结果集大小是可接受的。
2. 此外,合适的索引设计和查询条件的优化也是保证join查询效率的重要因素。
综上所述,join查询在关系型数据库中具有数据关联、数据一致性、查询效率和代码简洁性等好处。但在实际应用中,需要根据具体情况进行合理的使用和优化。
原文始发于微信公众号(程序员阿凯):面试官:为什么 MySQL 不推荐使用 join?
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/174348.html