数据库为什么都设计为单表
为什么全为单表设计
数据库的表格设计最好都为单表
理由
1、单表查询更利于后续的维护。
在实际开发场景中,在代码初步开发阶段(如果摊上一个不太靠谱的产品),业务发生变动,某张表的结构发生变动,很可能整个join查询都变得不可用,复杂的关联查询,在修改时,基本等于推倒重来。
但是如果我们使用了单表查询,拆成上诉例子中的三个步骤,我们可能只需要修改其中的一个步骤即可,比较利于维护。
2、代码可复用性高
这个不用多说,join联表的SQL,基本不太可能被复用,但是拆分后的单表查询,比如上面例子中,我查询出tab数据,任何地方组装需要tab数据,我都不需要再次做相关查询,直接使用。
3、效率问题
join联表查询,小表驱动大表,通过索引字段进行关联。如果表记录比较少的话,效率还是OK的,有时效率超过单表查询。但是如果数据量上去,多表查询是笛卡尔乘积方式,需要检索的数据是几何倍上升的。另外多表查询索引设计上也考验开发者的功底,索引设计不合理,大数据量下的多表查询,很可能把数据库拖垮。
相比而言,拆分成单表查询+代码上组装,业务逻辑更清晰,优化更方便,单个表的索引设计上也更简单。用多几行代码,多几次数据库查询换取这些优点,还是很值得的。
4、减少冗余字段的查询
在很多业务中,我们可能对某条记录只需要查询一次,此时如何使用关联查询,则不可避免的需要重复地访问一部分数据,从而可能会加剧网络和内存的消耗。
5、缓存利用率更高
比如上面查询中的tag是不常变动的数据,缓存下来,每次查询就可以跳过第一条查询语句。而关联查询,任何一张表的数据变动都会引起缓存结果的失效,缓存利用率不会很高。
6、其他
数据库资源比较宝贵,很多系统的瓶颈就在数据库上,很多复杂的逻辑我们在Service做,不在数据库处理会更好。
在后续数据量上去,需要分库分表时,Join查询更不利于分库分表,目前MySQL的分布式中间件,跨库join表现不良。
单表查询+代码上组装相当于解耦,现在开发中,我们常常使用各种ORM框架,不知道你的联查orm给你搞成了什么样,你是很难直接优化。
相关文章
- (二)购物商城数据库设计-商品表设计
- 数据库-库表设计 【分享一些库表设计经验】
- 数据库设计工具MySQLWorkBench[通俗易懂]
- 数据库系列 | MySQL设计三范式和反范式
- 阿里巴巴开源DataX全量同步多个MySQL数据库
- phpredis函数使用方法详解数据库
- Oracle的DML、DDL、DCL详解数据库
- 数据库设计时的建议详解数据库
- MySQL Status Innodb_buffer_pool_pages_data 数据库状态作用意思及如何正确
- 实现高效的SQL Server数据库设计(sqlserver设计)
- gOracle 11g数据库精彩绽放(oracledul11)
- Oracle数据库范式设计:最优解决方案(oracle数据库范式)
- 解决MySQL数据库表设计之道(mysql怎么设计表)
- Oracle数据库导出与导入指南(oracle导出与导入)
- 数据库SQL Server:不只是一个数据库(sqlserver不等于)
- 探索Oracle数据库的标志性图标设计(oracle数据库的图标)
- 如何有效管理Oracle数据库的硬盘空间?(oracle硬盘空间)
- Oracle数据库的分区设计与应用(数据库分区oracle)
- SQL Server 构建数据库的概念性标注(sqlserver标注)
- 脚本MySQL如何查看已建立数据库的脚本(mysql查看建库)
- 让Redis更加实用把它作为数据库来设计(放入Redis里)
- 乘除Oracle数据库中精彩的算数运算加减乘除(oracle中的加减)
- 学会了MySQL三范式,轻松掌握数据库设计技巧(mysql三范式怎么用)