运行 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')
这个查询在我们的慢查询日志中显示为需要一段时间。我的问题是如何提高效率。我觉得这似乎是我们的数据库运行速度较慢的部分原因。
我们还有一个更新查询,它在包含大约 14,000 多条记录的 InnoDB 表上运行。当用户第一次查看特定记录并且我们设置标题为viewed='YES'的字段时,会发生更新。
update test_table set viewed='YES' where id=55
此更新也显示在慢查询日志中。该表“test_table”上有大约 (5) 个不同的索引。
#
慢查询日志的输出
计数:165(0.35%)时间:2252.210041 S总计,13.649758 s AVG,2.026723 s至313.311842 S Max(8.96%)95%的时间:1181.480258 S总数,7.573591 S AVG,7.573591 S AVG,2.026723 S SIS SAVS SAVS SAVS SAVG SAVG ):总共 12.722 毫秒,平均 77 次,最大 38 到 233 次 (0.04%) 锁定的 95%:总共 11.681 毫秒,平均 75 次,最大 38 到 84 行发送的行数:平均 0 到 0 次 (0.00%) 检查的行数: 0 avg,0 到 0 max (0.00%) 数据库:用户:XXXXX@localhost:查询的 100.00% (165),所有用户的 99.76% (46921)
查询摘要:SET timestamp=N; INSERT INTO page_views (user_id, page_name, created) VALUES ('S', 'S', 'S')1;
page_views 的表结构
id (int) 主键 page_name (varchar(255)) 创建日期时间
我有哪些选项可以加快对非常大的表的简单插入和更新?