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

一、分表的好处:

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

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

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

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

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

二、分表如何实现

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

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

sql 复制代码
    SELECT * FROM student_1990 WHERE name = '张三'

    UNION ALL

    SELECT * FROM student_1991 WHERE name = '张三'

    UNION ALL

    SELECT * FROM student_1992 WHERE name = '张三'

    -- 继续依次查询所有的 student_xxxx 表,直到 student_2025

    UNION ALL

    SELECT * FROM student_2025 WHERE name = '张三';

推荐思路:

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

sql 复制代码
    SELECT name FROM sys.objects WHERE type = 'U' AND name LIKE 'student_%'

2.UNION ALL语法遍历拼接SQL

3.执行SQL

具体写法(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.objects

    WHERE type = 'U' AND name LIKE 'student_%';



    -- 执行动态SQL

    EXEC sp_executesql @sql, N'@nameToSearch NVARCHAR(100)', @nameToSearch;

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

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

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

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

  • 数据量和增长率:如果数据量固定或增长缓慢,预先分表可能更合适;若数据量大或增长快,动态分表更为灵活。
  • 维护和管理复杂度:预先分表简化了查询和维护,但可能导致过多的空表存在;动态分表更具灵活性,但需要额外的逻辑来管理表的创建和维护。
相关推荐
一个天蝎座的程序猿7 分钟前
金仓KingbaseES的数据集成软件,我用了一年多,把KDTS和KFS的用法还有踩过的坑一次说清
数据库
泡海椒18 分钟前
JQuick-SQL CASE WHEN 与函数:在查询中构建业务字段
数据库·sql
一个天蝎座的程序猿18 分钟前
2TB传感器数据搬迁记:IoTDB数据导入导出实战详解(CSV/SQL/TsFile全踩了一遍)
数据库
charlotte1024102424 分钟前
Redis 简介:从诞生到数据类型,再到缓存三大问题
数据库·redis·缓存
ClouGence34 分钟前
还在用命令行管理 Kafka?开源 CloudDM 让操作更简单
数据库·kafka·开源
骑着蜗牛撵大象3271 小时前
四种库收进一个SQL编辑器(下):跨库取数、方言对齐与四库巡检的落地拆解
jvm·数据库·sql·编辑器·数据迁移·跨库查询
惊讶的猫1 小时前
mysql-多表连接查询(JOIN)
数据库·sql·mysql
小羊没烦恼!1 小时前
TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
java·linux·运维·服务器·开发语言·数据库·mysql
码流子1 小时前
高速公路视频AI分析,算力该放哪:边缘、中心还是云边协同?
大数据·数据库·人工智能·物联网·音视频
xiaogai_gai1 小时前
委外出入库单从旺店通同步到 MySQL:基于轻易云的实战方案
数据库·mysql