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 分钟前
Redis持久化三剑客:RDB二进制快照、AOF文本日志、混合模式如何守护你的数据安全?
数据库·redis·缓存·aof·持久化存储·rdb
小呆爱发呆13 分钟前
第三章 MySQL 库表操作
数据库·mysql·adb
时间的拾荒人1 小时前
Redis 进阶实战:渐进式遍历、持久化机制与事务详解
数据库·redis·缓存
普通人62 小时前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
真上帝的左手2 小时前
4. 关系型数据库-MySQL-Canal 进阶
数据库·mysql·canal
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
唐老板3 小时前
uuidv7 来了:为什么别再拿 uuidv4 当主键了
数据库
SelectDB16 小时前
让变更流出 Doris:Apache Doris 5.0 基于增量计算的 CDC 技术解析
数据库
这个DBA有点耶16 小时前
MCP隔离层+行级语义审计+输出校验:AI访问数据库的安全边界拆解
数据库·人工智能·ai编程