【第39天】SQL进阶-SQL设计优化-反范式设计(SQL 小虚竹)

回城传送–》《100天精通MYSQL从入门到就业》

文章目录

  • 零、前言
  • 一、练习题目
  • 二、SQL思路
    • 初始化数据
    • 什么是反范式设计
    • 例子
    • 反范式设计的优点
    • 反范式设计的缺点
    • 实战中要注意的坑
  • 三、总结
  • 四、参考

零、前言

今天是学习 SQL 打卡的第 39 天。

​ 我的学习策略很简单,题海策略+ 费曼学习法。如果能把这些题都认认真真自己实现一遍,那意味着 SQL 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

今天的学习内容是:SQL设计优化-反范式设计

一、练习题目

题目链接难度
反范式设计★★★☆☆

二、SQL思路

在这里插入图片描述
在这里插入图片描述

初始化数据

什么是反范式设计

反范式设计,是违背数据库范式的设计原则,通过引入冗余数据来优化查询性能或满足特定业务需求的设计方法。
在范式设计中,我们追求的是数据的原子性、完整性和一致性。
而反范式设计则更注重于性能业务需求的满足。

例子

假设我们有一个在线电商平台的订单系统,其中涉及到用户、商品和订单等多个实体。在范式设计中,我们可能会将用户信息、商品信息和订单信息分别存储在不同的表中,并通过外键关联这些表。然而,在某些场景下,为了提高查询性能,我们可能会采用反范式设计。

例如,为了快速获取某个用户的订单总数和订单金额。

我们可以在用户表中直接添加“订单总数”和“订单总金额”这两个字段,并在每次用户下单或订单状态变更时更新这些字段的值。这样,当我们需要查询用户的订单信息时,就可以直接查询用户表,而无需通过复杂的JOIN操作关联多个表。

反范式设计的优点

  • 提高查询性能:通过引入冗余数据,可以减少查询时需要关联的表的数量,从而提高查询速度。
  • 简化业务逻辑:在某些场景下,反范式设计可以简化业务逻辑,减少代码复杂度。
  • 满足特定业务需求:有时为了满足特定的业务需求,我们可能需要打破范式设计的约束。

反范式设计的缺点

  • 数据冗余:反范式设计会增加数据的冗余度,占用更多的存储空间。
  • 数据一致性维护困难:当数据冗余时,如果更新操作没有同步进行,可能会导致数据不一致的问题。
  • 增加维护成本:在数据冗余的情况下,当需要修改数据结构或数据时,可能需要更新多个地方,增加了维护成本。

实战中要注意的坑

  • 谨慎使用:反范式设计并不是一种通用的解决方案,应该根据具体的业务需求和性能要求来谨慎使用。
  • 合理控制冗余度:在引入冗余数据时,要合理控制冗余度,避免过度冗余导致的问题。
  • 确保数据一致性:在反范式设计中,要特别注意数据一致性的维护,确保更新操作能够同步进行。
  • 定期评估和调整:随着业务的发展和变化,可能需要定期评估和调整数据库结构,以适应新的需求和挑战。

三、总结

反范式设计是数据库设计中的一种特殊手段,它通过引入冗余数据来优化查询性能或满足特定业务需求。
在使用反范式设计时,我们需要权衡其优缺点,并根据实际情况谨慎使用。
同时,在实战中要注意避免一些常见的坑,确保数据库结构的稳定性和高效性。

这题的答案就直接说了:
反范式优化的主要动机和思路是:

  • 通过适当增加冗余字段,减少连接查询的次数和复杂度
  • 对于经常发生的聚合计算,如果对实时正确性要求不高,可以缓存中间结果,减少实时的聚合计算压力
  • 用适度的写冗余,换取读操作的大幅优化
  • 适当的放宽索引,可以优化局限于少数字段的查询性能

四、参考

我是虚竹哥,我们明天见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654141.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

瓦罗兰特账号怎么注册 瓦罗兰特延迟高用什么加速器

《瓦罗兰特》(Valorant)是由拳头游戏(Riot Games)开发并发行的一款免费的多人在线第一人称射击游戏(FPS),它结合了传统的硬核射击机制与英雄角色的能力系统,为玩家提供了独特的竞技体…

无忧易售ERP:智慧采购,重塑供应链管理新高度

在当今瞬息万变的商业环境中,高效的采购策略不仅是成本控制的关键,更是企业竞争力的体现。无忧易售ERP,作为一站式企业资源规划解决方案的领航者,专为现代企业量身打造了集成化的采购管理模块,以智能化、自动化的工具为…

适用于Android的最佳数据恢复软件

如果您的 Android 设备崩溃,您需要找到一种方法来取回您的数据。幸运的是,有许多数据恢复程序可以帮助您恢复丢失的文件。有些是免费的,而另一些则需要付费。这是适用于Android设备的最佳数据恢复软件列表。 什么是数据恢复软件? …

python-数据可视化

python-数据可视化 ** 数据可视化指的是通过可视化表示来探索数据,它与数据挖掘**紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表,也可以是数以吉字节的数据 最流行的工具之一…

eBPF可观测之网络流量控制和管理traffic control浅尝

目录 工程背景 环境准备 安装工具​​​ 安装依赖包 安装C依赖库 操作步骤 目录结构 代码展示 效果展示 拓展提升 工程背景 首先发表一个"暴论" eBPF在可观测方面的应用,就是各种google。 不需要学习内核,只要掌握ebpf开发套路。…

什么是“SQL注入攻击”?如何预防和应对?

一、SQL注入攻击的概念 SQL注入攻击是一种针对数据库驱动的应用程序的攻击技术,其中攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码,试图非法访问、操作或破坏后端数据库。当应用程序不正确地处理用户输入,并将其直接拼接到SQ…

【NumPy】NumPy线性代数模块详解:掌握numpy.linalg的核心功能

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

国产数据库替代加速 助力数字中国建设

5月24日,随着第七届数字中国建设峰会在福州的成功举办,释放数据要素价值、发展新质生产力成为当下热议的话题。 数据作为新型生产要素,是数字化、网络化、智能化的重要基础。北京人大金仓信息技术股份有限公司(以下简称人大金仓&a…

如何改变echo在Linux下的输出颜色

文章目录 问题回答常规输出字体加粗斜体字带下划线闪烁效果 参考 问题 我正在尝试使用 echo 命令在终端中打印文本。 我想把文本打印成红色。我该怎么做? 回答 你可以使用 ANSI escape codes 定义控制输出颜色的变量。 ANSI escape codes是一种用于在文本中设置…

动手学深度学习23 LeNet

动手学深度学习23 LeNet 1. LeNet2. 代码3. QA 1. LeNet 两层卷积两层池化两层全连接 卷积就是让每一层shape不断压缩变小【高宽减少】,通道数增多,把特征信息放到不同的通道里面。每一个通道认为是一个模式。然后再做全连接的输入。 2. 代码 impor…

4款让人骄傲的国产软件,功能过于强大,却被误认为是外国佬研发

说到国产软件,许多人可能会有“流氓软件、弹屏广告多、隐藏消费套路”等负面印象。 这种偏见导致一些功能强大、用户友好的国产软件被误认为是外国人开发的。 1、格式工厂 格式工厂是一个很实用的国产格式转换工具,它完全免费且没有广告,不…

大模型实战-动手实现单agent

文章目录 入口cli_main.py工具tools.pyprompt prompt_cn.pyLLM 推理 model_provider.py致谢 agent 的核心思想:不断调用 LLM(多轮对话),让 LLM 按照指定的格式(例如 json)进行回复,提取 LLM 回复…

【LaTex】11 ACM参考文献顺序引用 - 解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题

【LaTex】11 ACM参考文献顺序引用 写在最前面解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题问题描述问题原因如何解决问题解决方案1(更简单)解决方案2(更自由) 小结 🌈你好呀!我是 是Yu欸 …

巧用java8的stream流的.collect(Collectors.toMap(arg1,arg2))

最近公司接手了一个低代码二次开发平台的需求,需要连接多张表的数据然后展示到界面上。 按照java的sql思路,我们直接通过left join去关联表就行了,但是该低代码平台有对sql连表查询有限制,就是有些表它是存在一个domainKey的&…

牛客题霸-SQL大厂面试真题(一)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。 以下内容是…

Java | Leetcode Java题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isSymmetric(TreeNode root) {return check(root, root);}public boolean check(TreeNode u, TreeNode v) {Queue<TreeNode> q new LinkedList<TreeNode>();q.offer(u);q.offer(v);while (!q.…

大数据框架总结(全)

☔️ 大数据框架总结&#xff08;全&#xff09; 关注“大数据领航员”&#xff0c;在公众号号中回复关键字【大数据面试资料】&#xff0c;即可可获取2024最新大数据面试资料的pdf文件 一. Hadoop HDFS读流程和写流程 HDFS写数据流程 &#xff08;1&#xff09;客户端通过…

【ARM+Codesys案例】T3/RK3568/树莓派+Codesys锂电池测试设备控制解决方案

锂电池诞生于上世纪60年代&#xff0c;90年代开始由日本索尼公司实现商业化。锂离子电池凭借快速充放电、长循环寿命、无记忆效应等众多优点&#xff0c;成为当今数码产品及电动汽车大规模应用的第一选择。与镍氢电池、铅酸电池相比&#xff0c;锂电池可以存储更多电能。现在&a…

ECOLOGY9解决明细表数据按需显示或隐藏

ECOLOGY9:由于领导需要查看完整的明细表数据&#xff0c;没有启用分页功能&#xff0c;导致大领导查看时又出现几百行的数据&#xff0c;影响使用体验。需求&#xff1a;只看正常表单数据&#xff0c;明细表数据&#xff0c;默认不显示&#xff0c;需要查看时再打开。 实现&am…

抖店怎么选品?抖店爆款选品思路技巧,新手直接用!

大家好&#xff0c;我是电商花花。 抖店选品永远是我们做抖店&#xff0c;做电商的核心&#xff0c;店铺想要出单&#xff0c;想要赚钱&#xff0c;我们就一定要学会怎么选品&#xff0c;怎么筛选商品。 而我们绝大多数新手并没有办法保证持续选爆款的能力&#xff0c;如果店…