运行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)) 创建日期时间
有什么选择可以加快非常大的表上的简单插入和更新?
答案 0 :(得分:0)
根据表中的大量行,应在这些表中定期添加/修改行。我建议先执行以下查询,然后查看你提到的查询的执行时间:
分析表page_views;
分析表test_table;
以上命令不会花费太多时间,应该以5/10秒执行。
如果您可以承受更长的维护时间(取决于桌子的大小):
优化表page_views;
优化表test_table;
如果您看到性能提升,我还想告知您可以配置每天执行分析并每周/每月优化的cron作业。