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

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

  • 数据量和增长率:如果数据量固定或增长缓慢,预先分表可能更合适;若数据量大或增长快,动态分表更为灵活。
  • 维护和管理复杂度:预先分表简化了查询和维护,但可能导致过多的空表存在;动态分表更具灵活性,但需要额外的逻辑来管理表的创建和维护。
相关推荐
LaughingZhu11 分钟前
Product Hunt 每日热榜 | 2026-10-01
数据库·人工智能·深度学习·神经网络·搜索引擎
阳光九叶草LXGZXJ12 分钟前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl
ha_lydms17 分钟前
MaxCompute中JSON函数
大数据·数据库·阿里云·json·dataworks·maxcompute·odps
细嗅蔷薇@1 小时前
DML常见操作
数据库·mysql
lusklusklusk1 小时前
Oracle数据库基础之7_备份恢复基础之SCN
数据库·oracle
ao-weilai2 小时前
MySQL数据库:MySQL基础概要
数据库·mysql
雪碧聊技术2 小时前
从 0 跑通一个最小 RAG Demo:文档切分、向量检索与答案生成
数据库·oracle
喜欢的名字被抢了2 小时前
08-Redis 性能优化篇:快在哪、BigKey、HotKey、慢查询与内存
数据库·redis·性能优化
阳光九叶草LXGZXJ2 小时前
达梦数据库-学习-68-dmasm0X_XXXXXX.log日志激增
linux·运维·数据库·sql·学习
Mortalbreeze2 小时前
MySQL 基础篇(三):一文掌握 MySQL 常见数据类型
linux·服务器·数据库·mysql