在高并发下,需要删除一个张表中符合条件的数据
方法1:直接delete...form... select 这种方式去删除符合条件的数据。
方法2:首选把需要删除的数据查到有一个临时表中,然后在让表和临时表关联去删除,
方法1和方法2的唯一区别在于删除和查询数据是否分离。
各位大神,上述两种发方法中,那种会比较好一些,或者您有更高性能的方法,请探讨一下,
PS:查数据时,需要关联两张数据量较大的表。
不管你怎么绕也没办法绕开最后删除时候的排他锁,这会让一堆指向相同数据的查询的共享锁全部等待。
正经的解决办法是避免大量的查询直接打到db,
1.读写分离,把写(删除)打到master,读取全部转移到slave上
2.在db前面包一层缓存
3.换用更合适的db(这个主要看你读写比率和读取方式)
4.升级硬件
把写(删除)打到master上? 这个我没读懂。。
@奇妙能力: 最标准的1 master n slave的db集群配置啊,master负责写,slave负责读。
delete...form 后面不是where吗.为什么是select
select是用来筛选那些符合条件的, 当然where少不了。
查询的地方用nolock
作为一个删除的操作, 使用nolock是不是不太好。、