基本插入/更新性能问题

时间:2013-08-13 17:33:05

标签: mysql database-performance

运行MySQL数据库,所有表都是InnoDB

每天晚上,我们都会列出通过批处理脚本发送给我们的最常见的慢速查询。

在此列表中有两个查询,一个插入和一个更新。

插入脚本记录用户的页面视图。为了提高效率,我们只为会话中的用户编写一次插入。因此,我们存储在会话中查看的页面,并在页面加载时执行in_array。如果页面不在数组中而不是我们编写插入内容。

此表有700,000多条记录,唯一的索引是主键(id)。

此表中的插入如下所示:

insert into page_views (user_id,page_name,created)
values ('4','Test Page','2013-08-13 10:44:21')

此查询显示我们的慢查询日志需要一段时间。我的问题是如何才能提高效率。我觉得好像这是我们的数据库运行速度较慢的部分原因。


我们还有一个在InnoDB表上运行的更新查询,其中包含大约14,000条记录。当用户第一次查看特定记录并且我们设置名为Viewed ='YES'的字段时,会发生更新。

update test_table set viewed='YES' where id=55

此更新也会显示在慢速查询日志中。该表“test_table”上有大约(5)个不同的索引。


慢查询日志的输出

数量:165(0.35%) 时间:总计2252.210041 s,平均13.649758 s,最大值为2.026723 s至313.311842 s(8.96%)   95%的时间:总计1181.480258,平均7.573591 s,最大值2.026723 s至49.99961 s 锁定时间:总计12.722毫秒,77平均,38至233最大(0.04%)   锁定的95%:总共11.681毫秒,75平均,38到84最大 发送的行数:0 avg,0到0 max(0.00%) 检查行:0 avg,0到0 max(0.00%) 数据库: 用户:         XXXXX @ localhost:100.00%(165)的查询,99.76%(46921)的所有用户

查询摘要: SET时间戳= N; INSERT INTO page_views(user_id,page_name,created)VALUES('S','S','S')1;

page_views的表结构

id(int)主键 page_name(varchar(255)) 创建日期时间

有什么选择可以加快非常大的表上的简单插入和更新?

1 个答案:

答案 0 :(得分:0)

根据表中的大量行,应在这些表中定期添加/修改行。我建议先执行以下查询,然后查看你提到的查询的执行时间:

分析表page_views;

分析表test_table;

以上命令不会花费太多时间,应该以5/10秒执行。

如果您可以承受更长的维护时间(取决于桌子的大小):

优化表page_views;

优化表test_table;

如果您看到性能提升,我还想告知您可以配置每天执行分析并每周/每月优化的cron作业。