不建议使用join的原因

不建议使用join的原因,第1张

不推荐使用join的原因:

1DB承担的业务压力大,能减少负担就减少。当表处于百万级别后,join导致性能下降;

2分布式的分库分表。这种时候是不建议跨库join的。目前mysql的分布式中间件,跨库join表现不良。

3修改表的schema,单表查询的修改比较容易,join写的sql语句要修改,不容易发现,成本比较大,当系统比较大时,不好维护。

不使用join的解决方法:

在业务层,单表查询出数据后,作为条件给下一个单表查询。也就是子查询。 会担心子查询出来的结果集太多。mysql对in的数量没有限制,但是

mysql限制整条sql语句的大小。通过调整参数max_allowed_packet ,可以修改一条sql的最大值。建议在业务上做好处理,限制一次查询出来的结果集是能接受的。

应用层次关联的优势:

1 将查询分解后,执行单个查询可以减少锁的竞争

2 在应用层关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展

3 查询本身效率也可能会有所提升。查询id集的时候,使用IN()代替关联查询,可以让MySQL按照ID顺序进行查询,这可能比随机的关联要更高效。

4 可以减少冗余几率的查询。在应用层做关联查询,意味着对应某条记录应用只需要查询一次,而在数据库中做关联查询,则可能需要重复访问一部分数据。

5 更进一步,这样做相当于在应用中实现了哈希关联,而不是使用MySQL的嵌套循环关联。某些场景哈希关联的效率要高很多。

1左右连接:以哪个表为主,结果集为“主表”的全部记录+“副表”与“主表”相匹配的记录,如果“副表”中没有和“主表”相匹配的记录,则相对应的记录显示为NULL

2左连接:左边表全部行+右边表相匹配的行,如果左边表中的某一行,在右边表中没有匹配的行,则显示NULL(left join 或者left outer join)

3右连接:和左连接相反。(right join 或者right outer join)

4内连接:它返回字段ID(连接条件)同时存在于两个表中的记录,也就是说,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行,内联接消除与另一个表中的任何行不匹配的行。(inner join或者join)

5全连接:不管匹配不匹配,全部都显示出来。(full join或者full outer join)

6交叉连接:没有WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(cross join不带where)

7自连接:给自己取个别名,一个表当两个表来使用。

数据库中INNER

JOIN的意思是组合两个或多个表中在公共字段之中有相符的值的记录。也就是根据列的关系整合多张表的记录。举个例子如下。

"Persons"

表,主键是"Id_P"

列,每个表中的主键都是唯一的列:

"Orders"

表,主键是"Id_O"

列,"Id_P"

列将两张表联系起来:

使用关键词

INNER

JOIN 从两个表中获取数据。下面的SELECT

语句列出了所有人的订购:

SELECT PersonsLastName, PersonsFirstName, OrdersOrderNo

FROM Persons

INNER JOIN OrdersON

PersonsId_P = OrdersId_P

ORDER BY PersonsLastName

以上就是关于不建议使用join的原因全部的内容,包括:不建议使用join的原因、数据库表关联查询的类型有什么、数据库中INNER JOIN的意思是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9845596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存