遇到技术问题 新接触net core框架
问题:我们数据库有个表有3596万条数据 且这个表是每天产生大量数据的
现在这个表已经没办法执行查询了 数据量太大太卡了
然后我想到的解决方案是 每天或每月自动生成新表 表名命名规则:表名+日期格式
net core里面我们用的 EntityFramework生成的数据上下文操作表的增删改查吗
但是如果我要操作的表名是动态的
例如表名命名规则是 表名+日期格式
且间隔一段时间会生成新表
这种情况如何用数据上下文去操作这种动态表名的增删改查啊
EF都是通过表实体映射成类,然后操作类进行数据的增删改查。既然你的表是动态生成的,那么也要动态的生成实体。这个貌似做不到。。。
为啥不考虑使用Sql呢?EF也支持执行Sql的
void Microsoft.EntityFrameworkCore.Metadata.IMutableEntityType.SetTableName(string name)
或modelBuilder.Entity<entityclass>(entity =>{entity.ToTable("table_202106")});
谢谢
我想到了另一种解决方案了 我固定建32个表 表名就是从每月1号到31号 和一张历史数据表 然后每个月1号自动把1-31号表里上月的数据迁移到历史表里 因为页面上的数据展示需求只要当月的数据 然后基本上历史表是用不到的 这样的话这样的话数据上下文就是固定的32张表名
其实还有有一个方法,虽然物理上有多个表,但是可以从逻辑上看作是有一个表。可以通过数据库自身提供的分区表功能,或者使用第三方的数据库中间件。
你这相当于用用时间进行分表,这样有很多查询的SQL要修改,不是所有需求都要分表的。你这才3000W数据就说卡,我们有系统有个表快1亿了,还能正常,说明你们的数据库没有优化。可以尝试做读写分离。。这样改动的地方比较少。。
在表数据未到达上亿的情况下可以通过一下方法解决思路:
通过索引和查询逻辑避免全表扫码和首次扫描记录的数;根据以下优先级顺序步骤测试优化