网易首页 > 网易号 > 正文 申请入驻

微软把1张表拆成3个实体用,78%开发者不知道这功能存在

0
分享至

去年有个数据挺有意思:Stack Overflow调研显示,.NET开发者花在优化数据库查询上的时间,平均占开发总工时的23%。更扎心的是,其中近半数优化最终证明是过度设计——就像给自行车装涡轮增压,力气使错了地方。

EF Core 10(实体框架核心10,微软.NET生态的对象关系映射工具)今年发布的Table Splitting(表拆分)功能,可能是解决这个问题最被低估的方案。它允许你把一张物理数据库表映射成多个实体类,听起来反直觉,但用对了场景能砍掉80%的冗余查询代码。

「我第一次用的时候,根本不知道这叫表拆分」

Ashok Reddy在Medium上分享了他的踩坑经历。这位全栈开发者原本只是想解决一个常见痛点:用户表里有30多个字段,但80%的查询只需要其中5个基础字段(ID、姓名、邮箱、状态、创建时间)。剩下的字段——地址详情、支付配置、隐私设置——不仅拖慢查询,还让代码审查时满眼都是「这个字段真的需要加载吗」的注释。

他的第一次尝试是典型的过度工程:把用户表垂直拆成三张物理表,用外键关联。结果查询复杂度爆炸,原本一行LINQ能搞定的事,变成了三表JOIN的噩梦。更讽刺的是,数据库监控显示JOIN带来的开销,比原来全表扫描还高。

直到他偶然发现EF Core的Owned Entity(拥有实体)配置,误打误撞实现了表拆分——逻辑上是三个独立实体,物理上仍是同一张表。查询基础信息时,ORM自动生成的SQL只选那5个字段;需要完整数据时,再按需加载。

表拆分的核心机制:一张表,多个实体

传统ORM映射是一对一:一个实体类对应一张表。表拆分打破这个惯例,允许同一行数据在代码层面表现为多个对象。这类似于面向对象设计中的「组合」模式,但由数据库层面保证原子性。

配置方式出人意料地简洁。以Reddy的案例为例,用户基础信息和地址详情在数据库中仍是同一行的不同列,但在代码里:

public class User { public int Id { get; set; } public string Name { get; set; } public UserProfile Profile { get; set; } } public class UserProfile { public string Address { get; set; } public string PaymentConfig { get; set; } }

EF Core通过Fluent API配置Owned Entity关系后,插入User时自动合并写入同一行;查询时默认只加载User,访问Profile属性才触发部分列的延迟加载。没有JOIN,没有额外的数据库往返,代码却清晰分离了关注点。

性能数据来自Reddy的实际项目:基础查询从平均47ms降到9ms,降幅81%。更隐蔽的收益是缓存命中率——高频访问的小实体更容易被EF Core的二级缓存命中。

什么场景适合用?什么场景会踩坑?

表拆分不是银弹。Reddy总结了三个适用信号:

第一,表有明确的「热/冷」数据分界。 比如订单表的基础状态(热)和物流轨迹JSON(冷),查询模式高度分离。如果所有字段访问频率差不多,拆分反而增加复杂度。

第二,不需要跨实体单独查询。 表拆分后的实体不能独立作为查询根——你无法直接查询所有UserProfile而不带上User。如果业务需要这种灵活性,物理拆表才是正解。

第三,写入路径能接受聚合根模式。 由于物理上是一行,更新Profile必须通过User实体进行,数据库层面保证原子性。这对多数业务是优势,但如果你习惯了微服务式的独立更新,会有学习成本。

Reddy提到一个反例:他曾尝试把文章的「内容」和「元数据」拆分,结果内容搜索需求爆发,每次都要通过元数据实体间接加载,代码比原来更丑。这个案例被他用在了团队Code Review里,标题是《当我们把简单问题复杂化》。

EF Core 10的隐藏改进:LEFT JOIN的退场

表拆分能替代多少原本需要JOIN的场景?Reddy的估算很具体:在他维护的代码库中,约35%的显式JOIN可以用表拆分或Owned Collection重构掉。剩下的65%涉及真正的跨表关系——比如订单和用户,物理上必须分开。

有趣的是,EF Core 10同期加入了LEFT JOIN和RIGHT JOIN的显式LINQ支持。这两个功能看似矛盾,实则互补:表拆分解决「同一行数据的逻辑分离」,新JOIN语法解决「跨表关系的精确控制」。Reddy的观察是,开发者终于不用为了性能牺牲代码可读性,也不用为了可读性容忍N+1查询

他举了一个对比案例。旧代码为了规避JOIN,用SelectMany硬凑结果集,生成的SQL让DBA看了沉默;新代码用表拆分表达「同一用户的不同侧面」,用显式LEFT JOIN处理「可能无关联的扩展数据」,两者各司其职。

Reddy在文章结尾抛了一个问题给读者:「你代码库里最臭长的LINQ查询,有多少是在解决『本不该存在的数据结构问题』?」他自己统计的数字是41%,来自一个三年前设计的「万能配置表」——现在正被逐步重构为表拆分模式。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
拉夫罗夫:西方将乌克兰推向更大范围冲突 俄方耐心有限

拉夫罗夫:西方将乌克兰推向更大范围冲突 俄方耐心有限

财联社
2026-04-19 17:41:04
广东签约拉科塞维奇内幕!朱芳雨接触多位NBA球员,嫌弃报价太低

广东签约拉科塞维奇内幕!朱芳雨接触多位NBA球员,嫌弃报价太低

篮球大陆
2026-04-19 22:15:01
美媒:特朗普最新信号——结束战争,转向经济

美媒:特朗普最新信号——结束战争,转向经济

参考消息
2026-04-18 16:23:05
揭开“白左圣母”的真面目

揭开“白左圣母”的真面目

名人苟或
2026-04-20 07:08:34
金像奖爆冷!古天乐一人占俩影帝提名,成龙、林峯、章子怡、马丽沦为陪跑工具人……

金像奖爆冷!古天乐一人占俩影帝提名,成龙、林峯、章子怡、马丽沦为陪跑工具人……

毒舌八卦
2026-04-20 09:13:03
黄圣依“消失”2个月后现身,晒瑞士游学照,网友:实验室出镜像女大

黄圣依“消失”2个月后现身,晒瑞士游学照,网友:实验室出镜像女大

动物奇奇怪怪
2026-04-20 00:47:39
皇马弃将11分钟打崩巴黎,租借条款埋了什么雷

皇马弃将11分钟打崩巴黎,租借条款埋了什么雷

赛场速报局
2026-04-20 08:19:48
黑粉攻击何润东风波升级!博主怒撕:蹭热度该适可而止,又老又丑

黑粉攻击何润东风波升级!博主怒撕:蹭热度该适可而止,又老又丑

小徐讲八卦
2026-04-19 15:19:03
从20元地摊到800亿帝国,只因崇拜许家印,女首富输光了一切

从20元地摊到800亿帝国,只因崇拜许家印,女首富输光了一切

顾史
2026-04-19 08:25:51
金庸给了她最难听的名字,小时候觉得好听,30岁后读出来都会脸红

金庸给了她最难听的名字,小时候觉得好听,30岁后读出来都会脸红

耳东文史
2026-04-04 00:02:10
直接下跪!泰伦卢你真能整活!!

直接下跪!泰伦卢你真能整活!!

柚子说球
2026-04-19 22:02:18
这是李鸿章妻妾的真实样貌,个个美艳身材修长,颜值不输当代女星

这是李鸿章妻妾的真实样貌,个个美艳身材修长,颜值不输当代女星

阿废冷眼观察所
2026-04-11 18:41:14
他撞人后连夜辞职,入职信息也是假的!他到底是谁?

他撞人后连夜辞职,入职信息也是假的!他到底是谁?

BRTV新闻
2026-04-19 20:36:35
一级恶意犯规,太阳队狄龙·布鲁克斯因掌掴雷霆队切特面部被判

一级恶意犯规,太阳队狄龙·布鲁克斯因掌掴雷霆队切特面部被判

好火子
2026-04-20 04:58:38
女生主动起来有多黏人?网友:这些女的太开放了

女生主动起来有多黏人?网友:这些女的太开放了

带你感受人间冷暖
2026-01-27 00:20:06
恒大0.69%清偿率:一个时代神话的墓志铭

恒大0.69%清偿率:一个时代神话的墓志铭

流苏晚晴
2026-04-17 18:20:43
1985年,国安叛徒藏身南美,中国6名兵王万里锄奸,FBI颜面尽失

1985年,国安叛徒藏身南美,中国6名兵王万里锄奸,FBI颜面尽失

干史人
2026-04-14 21:10:03
原来失业后都是这样熬过来的!网友:脱去昔日的长衫

原来失业后都是这样熬过来的!网友:脱去昔日的长衫

另子维爱读史
2026-03-19 19:58:58
周定洋跑死也白跑!严鼎皓无效运动,古斯塔沃“跑路榜”第一

周定洋跑死也白跑!严鼎皓无效运动,古斯塔沃“跑路榜”第一

刀锋体育
2026-04-20 08:54:42
他有上将的能力,更有上将资历:两任首长都不看好他,最后成中将

他有上将的能力,更有上将资历:两任首长都不看好他,最后成中将

浩渺青史
2026-04-20 02:35:41
2026-04-20 09:55:00
算力游侠
算力游侠
游走在API与报错之间,用魔法(AI)打败魔法的非硬核玩家。
1588文章数 17关注度
往期回顾 全部

科技要闻

蓝色起源一级火箭完美回收 客户卫星未入轨

头条要闻

媒体:日本近期一系列危险动作挑衅中国 中国需警惕

头条要闻

媒体:日本近期一系列危险动作挑衅中国 中国需警惕

体育要闻

湖人1比0火箭:老詹比乌度卡像教练

娱乐要闻

何润东涨粉百万!内娱隔空掀桌第一人

财经要闻

月之暗面IPO迷局

汽车要闻

29分钟大定破万 极氪8X为什么这么多人买?

态度原创

旅游
艺术
家居
本地
公开课

旅游要闻

谷雨时节,赴一场牡丹与蝴蝶的浪漫之约

艺术要闻

王羲之《换鹅帖》尚在人间,惊艳无比!

家居要闻

法式线条 时光静淌

本地新闻

12吨巧克力有难,全网化身超级侦探添乱

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版