我们的数据库中有一个表格可以跟踪用户行为。 基本上,我们会跟踪用户浏览的每个页面。
在表格中我们有以下内容:
id | user_id | user_ip | page | created_on
当用户从 PC 检查网站时,假设他检查了一篇特定文章,系统会在“页面”下保存以下“/article/specific/slug”,但是如果用户从移动版本的它保存的网站“http://m.website.com/article/specific/slug”
我们正在寻求改变这一点。
我们在数据库中添加了一个新字段作为枚举 (pc, m) 因此我们希望无论设备如何始终保存在“页面”下“/article/specific/slug”
一个问题是我们现在有 3000 万条过去的记录需要转换。
这意味着我们编写一个查询来检查“http://m.website.com”是否存在更新字段删除“http://m.website.com”并将“设备”字段更新为“m”。
有人可以帮忙吗?
最佳答案
查询:
update visits_table
set
page=replace(page, 'http://m.website.com', ''),
device='m'
where
page like 'http://m.website.com%';
要浏览 3000 万行,您必须...浏览 3000 万行。所以你要么只用上面的查询来做:
- 当网站停机维护时
- 当网站流量较低时(例如清晨?)
- 任何时候你想要,但在完成之前期望对 mysql 有一些压力(这可能需要一段时间)
否则,如果您的 id 是增量的,则可以通过将查询拆分为多个查询来批量更新。例如:
update ... where ... and id between 1 and 1000000;
update ... where ... and id between 1000001 and 2000000;
update ... where ... and id between 2000001 and 3000000;
...
关于php - 如何清理一个3000万条记录的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40945151/