MySQL-如何提高更新mysql数据表记录的速度?

MySQL-如何提高更新mysql数据表记录的速度?

浮生未歇 发布于 2016-11-26 字数 680 浏览 1251 回复 3

大概情况是这样的:
现在有一张表,里面的数据是抓来的,现在想定期的来更新这张表的数据,但是里面会有图片的下载操作以及对图片的处理,这样以来速度会慢点,现在想找办法来提高更新的速度,不知有什么好方法?
我的2个思路:
1、直接扫描表来更新,但是会比较慢
2、给表增加字段locked,当更新一条记录的时候
(a.取locked为0的,locked 置为1,更新完置为0,开启多进程来跑,会不会Id为0的刚更新完0-1-0,另一个进程也来操作了,这样就会一直更新了,死循环了?
b.对上面的操作做变化,取0的更新,更新完后locked+1,但是一直这样跑下去,locked也会增大,下次就没法取出数据了。当然也可以比如为10的话就更新为0)
总感觉以上方法不妥,请大家看看还有什么好的解决方法,一起交流下。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2017-02-14 3 楼

我觉的你的第二个思路(b)就没问题,采用乐观锁方式基本上就可以保证操作最大程度的独占性,我在简单的说下思路:

每次运行更新数据的脚本时,先将 locked 字段最大值查询出来(通常情况下所以的数据是一致的),有了这个值,查询需要处理的数据时加上 locked = 当前查询出来的最大值,当要对一条数据进行处理时先修改locked,在之前的基础上+1,然后再处理条数据的图片等。

或者先具体看下 乐观锁的例子

虐人心 2016-12-15 2 楼

增加一个图片是否更新完毕的字段,遇到带有图片并需要下载的记录的时候,你可以给消息队列发送一条消息(也就是另外一个进程),让其处理下载和处理操作,操作完成之后,再更新相应的记录,不影响这边正常的更新

归属感 2016-12-12 1 楼

我觉得你应该做下索引,最好是b树索引,根据索引字段来更新一向是最快的,但是注意的是不要一下子从头扫到尾,你的update语语中不要用limit语句,最好用控制范围的,比如大于小于号这种的,我的服务器上就是这么优化的,还有更新的话我觉得你不要一下子更新,可以分时间段来更新,比如说预取数据,深夜同步一下。