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

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

  • 数据量和增长率:如果数据量固定或增长缓慢,预先分表可能更合适;若数据量大或增长快,动态分表更为灵活。
  • 维护和管理复杂度:预先分表简化了查询和维护,但可能导致过多的空表存在;动态分表更具灵活性,但需要额外的逻辑来管理表的创建和维护。
相关推荐
周杰伦fans10 分钟前
[特殊字符] 代理模式超详细讲解 ——.NET
数据库·c#·代理模式
YJlio23 分钟前
「C++ 40 周年」:从“野蛮生长的指针地狱”到 AI 时代的系统底座
c++·人工智能·oracle
TDengine (老段)42 分钟前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
2301_800256111 小时前
第七章 空间存储与索引 知识点梳理3(空间填充曲线)
数据库·笔记·sql·postgresql
冰封剑心1 小时前
MiniCPM-V-2_6 (4-bit 量化)使用
java·前端·数据库
小满、1 小时前
MySQL :存储引擎原理、索引结构与执行计划
数据库·mysql·索引·mysql 存储引擎
x***13392 小时前
SQL Server 创建用户并授权
数据库·oracle
JIngJaneIL2 小时前
智慧物业|物业管理|基于SprinBoot+vue的智慧物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·论文·智慧物业管理系统
枫叶梨花2 小时前
一次 Kettle 中文乱码写入失败的完整排查实录
数据库·后端
Gobysec3 小时前
Goby 漏洞安全通告|Oracle Identity Manager 命令执行漏洞(CVE-2025-61757)
安全·oracle·漏洞检测·cve-2025-61757·漏洞研究