MYSQL多线程并发操作同一张表同一个字段的问题有什么办法解决吗?被操作的字段都建立了普通索引?
可以用乐观锁方案解决
1.在表里增加个字段,版本号
图片来源:网络
2.每次更新前先从数据库里获取这个版本号的值,然后更新时要同步更新版本号+1,并且增加更新条件版本号=查询出来的值。
3.因为更新时每次只可能有一个线程更新到数据,等到另外一个线程再去更新数据的时候版本号已经+1了,所以会更新失败,重新获取版本号再走更新流程,这样就解决了多线程并发更新被覆盖的问题。 而且乐观锁机制避免了长事务中的数据库加锁开销(多个线程操作过程中,都没有对数据库数据加锁),大大提升了大并发量下的系统整体性能表现。
在对表中某一字段建立索引时,若其值有重复,可选择什么索引?
普通的非聚集索引,如果还有其他条件约束较多可以考虑聚合索引,只要不是大量数据重复导致聚集扫描的效率高于索引查找的效率,具体可以对比一下查找时间选择是否有必要加索引。