0
我有一个非常大的图像数据库,我需要运行更新来增加图像的查看计数。每个小时都有超过一百万个独特的行需要更新。现在运行这个查询需要大约一个小时,无论如何要让这个运行速度更快?MySQL查询优化大表
我创建一个内存表:
insert low_priority into tmp_views_table
values ('key', 'count'),('key', 'count'),('key', 'count'), etc...
:
CREATE TABLE IF NOT EXISTS tmp_views_table (
key VARCHAR(7) NOT NULL,
views INT NOT NULL,
primary key (`key`)
) ENGINE = MEMORY
然后我使用运行,直到所有的意见已插入存储表中的循环插入在同一时间观看1000次
然后我运行的实际表的更新是这样的:
update images, tmp_views_table
set images.views = images.views+tmp_views_table.views
where images.key = tmp_views_table.key
这最后一次更新是一个是TA国王一个小时左右,内存表的东西运行得非常快。
有没有更快的方法,我可以做这个更新?
数字ID比varchar更有意义。另外,你的表格是否被索引? – 2012-01-05 18:37:56
我不确定内存表的索引在哪里保存,但是它们不会减慢这些插入/更新操作,特别是在** MEMORY **引擎的情况下? – Rolice 2012-01-05 18:58:20
@OliCharlesworth id是一个散列,所以它包含字母和数字,是的主键是关键或散列 – Brian 2012-01-05 18:58:49