首页 新闻 会员 周边 捐助

关于SQL一个高并发时,删除表中一些数据的问题。

0
[已解决问题] 解决于 2017-10-10 09:46

在高并发下,需要删除一个张表中符合条件的数据

方法1:直接delete...form... select 这种方式去删除符合条件的数据。

方法2:首选把需要删除的数据查到有一个临时表中,然后在让表和临时表关联去删除,

方法1和方法2的唯一区别在于删除和查询数据是否分离。

各位大神,上述两种发方法中,那种会比较好一些,或者您有更高性能的方法,请探讨一下,

PS:查数据时,需要关联两张数据量较大的表。

SQL
奇妙能力的主页 奇妙能力 | 菜鸟二级 | 园豆:253
提问于:2017-10-09 10:38
< >
分享
最佳答案
0

不管你怎么绕也没办法绕开最后删除时候的排他锁,这会让一堆指向相同数据的查询的共享锁全部等待。

正经的解决办法是避免大量的查询直接打到db,

1.读写分离,把写(删除)打到master,读取全部转移到slave上

2.在db前面包一层缓存

3.换用更合适的db(这个主要看你读写比率和读取方式)

4.升级硬件

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2017-10-09 11:05

把写(删除)打到master上? 这个我没读懂。。

奇妙能力 | 园豆:253 (菜鸟二级) | 2017-10-09 11:42

@奇妙能力: 最标准的1 master n slave的db集群配置啊,master负责写,slave负责读。

Daniel Cai | 园豆:10424 (专家六级) | 2017-10-09 11:45
其他回答(2)
0

delete...form 后面不是where吗.为什么是select

吴瑞祥 | 园豆:29449 (高人七级) | 2017-10-09 11:04

select是用来筛选那些符合条件的, 当然where少不了。

支持(0) 反对(0) 奇妙能力 | 园豆:253 (菜鸟二级) | 2017-10-09 11:43
0

查询的地方用nolock

Tom.汤 | 园豆:3058 (老鸟四级) | 2017-10-09 11:39

作为一个删除的操作, 使用nolock是不是不太好。、

支持(0) 反对(0) 奇妙能力 | 园豆:253 (菜鸟二级) | 2017-10-09 11:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册