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

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

  • 数据量和增长率:如果数据量固定或增长缓慢,预先分表可能更合适;若数据量大或增长快,动态分表更为灵活。
  • 维护和管理复杂度:预先分表简化了查询和维护,但可能导致过多的空表存在;动态分表更具灵活性,但需要额外的逻辑来管理表的创建和维护。
相关推荐
Albert Edison几秒前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
云计算磊哥@18 分钟前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
小二·33 分钟前
Redis 内存溢出(OOM)排查与恢复实战
数据库·redis·bootstrap
pqk6V6Vep34 分钟前
Redis 分布式锁进阶第一篇讲解
数据库·redis·分布式
giaz14n9X1 小时前
Redis 分布式锁进阶第六十一篇
数据库·redis·分布式
是一个Bug1 小时前
MongoDB:像搭积木一样存数据
数据库·mongodb
ULIi096kr1 小时前
MySQL解决Too many connections报错:连接数爆满排查、优化与永久解决方案
数据库·mysql·adb
SL-staff2 小时前
(一)数据源配置 —— JVS-Rules规则引擎 V2.5 操作说明介绍
数据库·jar·规则引擎·数据源·jvs-rules·api 接口·jvs低代码
摇滚侠3 小时前
Spring 零基础入门到进阶 基于 XML 管理 Bean 14-28
xml·数据库·spring
Metaphor6923 小时前
使用 Python 给 PDF 设置背景色或背景图
数据库·python·pdf