当前位置: 首页 > 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的表,这个就叫预先分表,而动态分表是每次插入前判断有没有该数据表,没有则创建,有则插入。

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • gradle 构建项目添加版本信息
  • npm create-react-app 项目名报错
  • java题目之数字加密以及如何解密
  • 第一弹:基于ABAP OLE技术实现对服务器文件进行读写操作
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 多选题序号3
  • springMVC常用注解
  • K8S 上部署 Prometheus + Grafana
  • VScode连接虚拟机运行Python文件的方法
  • 物联网mqtt网关搭建背后的技术原理
  • [k8s源码]6.reflector
  • 开发面试算法题求教
  • Mojo模型魔法:动态定制特征转换的艺术
  • C#中栈和堆以及修饰符
  • 系统架构设计师教程 第3章 信息系统基础知识-3.8 典型信息系统架构模型-解读
  • Kafka Producer之事务性
  • [deviceone开发]-do_Webview的基本示例
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【技术性】Search知识
  • PHP CLI应用的调试原理
  • vue-loader 源码解析系列之 selector
  • Vue学习第二天
  • 好的网址,关于.net 4.0 ,vs 2010
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​iOS实时查看App运行日志
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Maven错误Error executing Maven
  • # 安徽锐锋科技IDMS系统简介
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #mysql 8.0 踩坑日记
  • #pragma pack(1)
  • #控制台大学课堂点名问题_课堂随机点名
  • (09)Hive——CTE 公共表达式
  • (13):Silverlight 2 数据与通信之WebRequest
  • (39)STM32——FLASH闪存
  • (Java)【深基9.例1】选举学生会
  • (编译到47%失败)to be deleted
  • (补)B+树一些思想
  • (动态规划)5. 最长回文子串 java解决
  • (二)Eureka服务搭建,服务注册,服务发现
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)Flink Watermark
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)进入MySQL 【事务】
  • ****三次握手和四次挥手
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core 成都线下面基会拉开序幕
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET/C# 使窗口永不获得焦点
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net8 Blazor 尝鲜
  • .net网站发布-允许更新此预编译站点
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @ModelAttribute注解使用
  • [ Linux ] git工具的基本使用(仓库的构建,提交)