2013
全部博文(65)
分类: Mysql/postgreSQL
2013-04-27 16:35:35
需求:有张业务表table,里面有很多字段,若里面的某一行记录更新了,则将这行记录重新加载到应用实现的索引缓存中。
Table表的架构类似:
id |
colA |
…… |
status |
1 |
kkk |
…… |
123456 |
2 |
test |
…… |
123457 |
3 |
kkk |
…… |
123458 |
目前的做法:
若里面的某一行记录更新了,则更新那行记录的字段status(这个字段始终是一个增长的值),然后通过:select * from table where status>xxx 将数据加载到索引缓存中。
问题在于当需要更新table表中某一类的数据时,如一次性更新100万行,按照现有的方法,需要每行去更新status字段的值,然后通过select * from table where status>xxx 将数据加载到索引缓存中?每行更新效率也比较低,而且批量load数据时,可能对IO有点压力。
改进:
这个需求可以用类似分批load的方式,可以批量更新记录,分批load数据到索引缓存。如:
Update table set colB=’xxx’ ,status=’1363229614’ where colA=’kkk’;(假设这里更新了100万行数据)
id |
colA |
…… |
status |
1 |
kkk |
…… |
1363229614 |
2 |
test |
…… |
1363229612 |
3 |
kkk |
…… |
1363229614 |
Load数据到索引缓存时,采用:
Select * from table where status>=’1363229614’ and id>1000 order by status,id asc limit 5000;(load 下一批数据是将status和id传递过去即可)