需求背景:
tba 里面根据ID(primary key)查询出1000 条记录,并把 这1000条记录加载到页面,业务处理后 基于原来1000条记录,有插入,删除,修改的,把新的记录集 要保存到tba。
方案一:
把新的记录用一个表变量传进来, 然后 直接根据ID把 原来 1000 全部删除,然后全部插入。
方案二:
把新的记录用一个表变量传进来, 然后进行比较 delete , 然后merge into update.
方案三:
在程序端进行比较,把 删除 修改 插入 记录直接找出来,然后通过3个表变量 直接操作。子在数据库就少了比较的操作。
对于这种不知道还有什么好的方案, 个人倾向方案三,
方案一 如果表记录非常大超过10亿,删除 和插入都会导致cluster index 的移动。效率低
方案二 有一个比较逻辑在里面。会影响数据库性能。
------解决方案--------------------
对于单表,设置复合主键其实没问题。注意一点就是,要是在其他表与其有外键关系,最好不要使用复合主键,不然维护很麻烦。