连表查询 VS 单表查询

Benjaman 发布于 2017/09/19 12:03
阅读 282
收藏 1

老生常谈,但我还是想说出自己的疑虑,希望有经验的源友能说说看法。

 

单标查询:

    优点:易于做缓存;方便以后分库分表;MySQL 是 nested loop join,大数据量时 join 的查询效率低,单表查询避免了这种情况;

    缺点:编写麻烦,要调用很多次 DAO 方法;如果其中一个 DAO 方法查出的 ID 很多,那么下一个 DAO 方法就会有一个 IN 子句,参数值是很多个 ID,性能很低;

 

那么究竟什么情况应该连表,什么情况应该单表,怎样避免单表查询的上述问题?

先谢谢你们了。

 

加载中
0
张亦俊
张亦俊

这还需要问,一个三范式摆好的数据库肯定是用连接查询,性能差就建索引。

在极端情况下要退范式的话,放弃MySQL吧,去用什么mongodb、redis好得多

开源中国首席罗纳尔多
开源中国首席罗纳尔多
@张亦俊 回复@张亦俊 : 列不可分是什么意思?
张亦俊
张亦俊
回复 @绫小路清隆 : 通俗来讲,首先列不可分,其次,主键是名正言顺的主键,不存在其他实际在当主键的列。
开源中国首席罗纳尔多
开源中国首席罗纳尔多
请问 三范式 通俗来讲是讲什么的呀?
丛林迷雾
丛林迷雾
泛式讲的是设计,这里抛出来的是不同技术实现的应用场景,况且索引不是万能的
0
丛林迷雾
丛林迷雾

联表必然会损失性能,但是这种方式也不可能会淘汰,使用场景比如数据仓库、etl等

应用层面数据量特别大的时候应该避免,肯定会增加复杂度

而且这种做法并不是单单为了解决单表数据量才采用的方式

当你的服务分布在不同的集群上时候,这种做法的好处才能体现

0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

我都是直接Leftjoin的

0
老菜鸟0217
老菜鸟0217

系统并发量以及表的数据量不是特别大的话,可以join,然后通过索引、缓存等方式优化性能;

极端情况下,看过58同城一哥们说他们禁止任何join!

返回顶部
顶部