数据库为什么都设计为单表

简介: 数据库为什么都设计为单表

为什么全为单表设计

数据库的表格设计最好都为单表

理由

1、单表查询更利于后续的维护。

在实际开发场景中,在代码初步开发阶段(如果摊上一个不太靠谱的产品),业务发生变动,某张表的结构发生变动,很可能整个join查询都变得不可用,复杂的关联查询,在修改时,基本等于推倒重来。

但是如果我们使用了单表查询,拆成上诉例子中的三个步骤,我们可能只需要修改其中的一个步骤即可,比较利于维护。

2、代码可复用性高

这个不用多说,join联表的SQL,基本不太可能被复用,但是拆分后的单表查询,比如上面例子中,我查询出tab数据,任何地方组装需要tab数据,我都不需要再次做相关查询,直接使用。

3、效率问题

join联表查询,小表驱动大表,通过索引字段进行关联。如果表记录比较少的话,效率还是OK的,有时效率超过单表查询。但是如果数据量上去,多表查询是笛卡尔乘积方式,需要检索的数据是几何倍上升的。另外多表查询索引设计上也考验开发者的功底,索引设计不合理,大数据量下的多表查询,很可能把数据库拖垮。

相比而言,拆分成单表查询+代码上组装,业务逻辑更清晰,优化更方便,单个表的索引设计上也更简单。用多几行代码,多几次数据库查询换取这些优点,还是很值得的。

4、减少冗余字段的查询

在很多业务中,我们可能对某条记录只需要查询一次,此时如何使用关联查询,则不可避免的需要重复地访问一部分数据,从而可能会加剧网络和内存的消耗。

5、缓存利用率更高

比如上面查询中的tag是不常变动的数据,缓存下来,每次查询就可以跳过第一条查询语句。而关联查询,任何一张表的数据变动都会引起缓存结果的失效,缓存利用率不会很高。

6、其他

数据库资源比较宝贵,很多系统的瓶颈就在数据库上,很多复杂的逻辑我们在Service做,不在数据库处理会更好。

在后续数据量上去,需要分库分表时,Join查询更不利于分库分表,目前MySQL的分布式中间件,跨库join表现不良。

单表查询+代码上组装相当于解耦,现在开发中,我们常常使用各种ORM框架,不知道你的联查orm给你搞成了什么样,你是很难直接优化。

相关文章
|
SQL 关系型数据库 MySQL
MySQL数据库练习题(单表查询,多表关联查询)(一)
MySQL数据库练习题(单表查询,多表关联查询)
535 0
|
关系型数据库 MySQL 数据库
MySQL数据库练习题(单表查询,多表关联查询)(二)
MySQL数据库练习题(单表查询,多表关联查询)(二)
205 0
|
存储 关系型数据库 MySQL
为什么大家说mysql数据库单表最大两千万?依据是啥?
为什么大家说mysql数据库单表最大两千万?依据是啥?
243 0
|
SQL 开发框架 .NET
数据库单表查询 - 简单筛选查询
数据库单表查询 - 简单筛选查询
119 0
|
SQL 关系型数据库 MySQL
MySQL数据库 单表数据记录查询
MySQL数据库 单表数据记录查询
139 0
MySQL数据库 单表数据记录查询
|
关系型数据库 MySQL 数据库
MySQL数据库之单表记录查询
MySQL数据库之单表记录查询
241 0
MySQL数据库之单表记录查询
还在手写单表的增删改查??还不快快使用通用mapper
还在手写单表的增删改查??还不快快使用通用mapper
还在手写单表的增删改查??还不快快使用通用mapper
|
存储 数据库
PolarDB-X 1.0-常见问题-分库分表问题-为什么在PolarDB-X的数据库中创建一张单表,它会在每一个分库中都创建同样的表,但数据只存储在第一个分库上?
PolarDB-X 1.0设计为,创建单表时会给所有的分库里面都创建同样的表,但数据只存储第一个分库的表里面,目的是为了在单表转到广播表的时候,可以不用初始化表结构,仅需要同步数据。
171 0
|
数据库
【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】
简单的需求,点点鼠标就可以了,那么复杂的需求呢?还是要写代码,哈哈。 不要被我误导了哦,关于什么时候写代码的问题,请看这里:http://www.cnblogs.com/jyk/archive/2009/06/21/1507594.html    单表的增删改查         我有一个梦想,那就是不用敲代码,只需要点点鼠标,就可以实现客户的需求。
1125 0
|
存储 关系型数据库 数据库
mysql,sqlserver数据库单表数据过大的处理方式
经常混迹于技术社区,频繁看到这个题目,今天干脆在自己博客重复一遍解决办法: 针对mysql,sqlserver等关系型数据库单表数据过大的处理方式 如果不是阿里云的分布式数据库 DRDS 那种多机器集群方案的话: 先考虑表分区 ;然后考虑分表 ;然后考虑分库。
2568 0