当前位置: 首页 > news >正文

C#基础:数据库分表的好处和实现方式

一、分表的好处:

1.提升查询速度:分表筛选后再拼接,而不是查大表,速度会显著提升

2.管理容易:根据业务需求,通常会按照时间或者空间来分表

3.提高并发性:降低锁竞争和查询阻塞的风险,提高数据库的并发处理能力。

4.优化备份:优先备份重要分表

5.提高稳定性:减少单表故障对整个系统的影响,提高了系统的可靠性和稳定性

二、分表如何实现

【思考】分表后如何查询?例如我分了一个student_1990到student_2025表,我想查这些学生表(student_xxxx)中叫张三的人。

不应该的写法(写法多、每年需要修改一次):

    SELECT * FROM student_1990 WHERE name = '张三'UNION ALLSELECT * FROM student_1991 WHERE name = '张三'UNION ALLSELECT * FROM student_1992 WHERE name = '张三'-- 继续依次查询所有的 student_xxxx 表,直到 student_2025UNION ALLSELECT * FROM student_2025 WHERE name = '张三';

推荐思路:

1.先查出有多少张这种表

    SELECT name FROM sys.objects WHERE type = 'U' AND name LIKE 'student_%'

2.UNION ALL语法遍历拼接SQL

3.执行SQL

具体写法(SQL):

    DECLARE @sql NVARCHAR(MAX);DECLARE @tableName NVARCHAR(100);DECLARE @nameToSearch NVARCHAR(100);SET @nameToSearch = '张三';  -- 要查询的学生姓名SET @sql = '';-- 构建动态SQL,查询所有符合 'student_' 开头的表SELECT @sql = @sql +CASE WHEN @sql = '' THEN '' ELSE ' UNION ALL ' END +'SELECT * FROM ' + QUOTENAME(name) + ' WHERE name = @nameToSearch'FROM sys.objectsWHERE type = 'U' AND name LIKE 'student_%';-- 执行动态SQLEXEC sp_executesql @sql, N'@nameToSearch NVARCHAR(100)', @nameToSearch;

当然,在程序中写也是可以的,用foreach遍历拼接字符串输入。

三、预先分表还是动态分表?

【名词解释】预先分表是程序员先分号表再安排数据插入,例如我创建student_1990到student_2099的表,这个就叫预先分表,而动态分表是每次插入前判断有没有该数据表,没有则创建,有则插入。

【解答】需要根据实际需求判断:

  • 数据量和增长率:如果数据量固定或增长缓慢,预先分表可能更合适;若数据量大或增长快,动态分表更为灵活。
  • 维护和管理复杂度:预先分表简化了查询和维护,但可能导致过多的空表存在;动态分表更具灵活性,但需要额外的逻辑来管理表的创建和维护。
http://www.lryc.cn/news/404843.html

相关文章:

  • 基于3D开发引擎HOOPS平台的大型三维PLM系统的设计、开发与应用
  • 学习React(描述 UI)
  • mysql字符类型字段设置默认值为当前时间
  • java题目之数字加密以及如何解密
  • Linux基于CentOS7【yum】【vim】的基础学习,【普通用户提权】
  • 盛元广通实验室自动化生物样本库质量控制管理系统
  • Java | 自制AWT单词猜一猜小游戏(测试版)
  • docker搭建ES 8.14 集群
  • 自定义特征的智能演进:Mojo模型中的动态特征选择控制
  • Git->Git生成patch和使用patch
  • 开发面试算法题求教
  • OpenStack中nova的架构
  • 力扣高频SQL 50题(基础版)第五题
  • Air780EP- AT开发-阿里云应用指南
  • 【中项】系统集成项目管理工程师-第4章 信息系统架构-4.4数据架构
  • excel批量新建多个同类型的表格
  • React Native 与 Flutter:你的应用该如何选择?
  • DP学习——状态模式
  • 前端性能优化面试题汇总
  • C#基于SkiaSharp实现印章管理(4)
  • Vue全家桶 - pinia 的理解和学习2(Pinia 核心概念的插件、组件外的 Store 和 服务器渲染(SSR))
  • 数学建模(6)——预测类模型目录
  • 安卓刷入系统证书
  • 中科亿海微信号采集核心板在振动采集场景中的应用
  • `panic` 是 Go 语言中用来表示发生了严重错误的一种机制
  • 【BUG】已解决:requests.exceptions.ProxyError: HTTPSConnectionPool
  • Python实现招聘数据采集 ,并做可视化分析
  • ES中的数据类型学习之Aggregate metric(聚合计算)
  • 看准JS逆向案例:webpack逆向解析
  • 【C语言】 利用栈完成十进制转二进制(分文件编译,堆区申请空间malloc)