gpt4 book ai didi

php - 需要 MySQL INSERT - 对具有数百万条记录的表进行 SELECT 查询

转载 作者:行者123 更新时间:2023-11-29 04:14:36 27 4
gpt4 key购买 nike

我正在尝试朝着优化 90GB 以上的表迈出一步:

旧表

每天 table 上都会抢走大约。来自外部源的 750,000 条记录,并将它们添加到具有新日期的表中。据我了解,这已经持续了三年。 97% 的记录不会从一天到下一天发生变化。

新建表格

我正在尝试遍历旧表(数百万条记录)并消除冗余,这可能会大大减少表的大小。

旧表

  • 日期
  • 记录编号
  • data_field(确实有很多字段,但为了举例)

new_table_index

  • 日期
  • index_id

new_table

  • index_id
  • 记录编号
  • 数据字段

我们遍历 old_table 中每条记录的逻辑

如果(record_id 不在 new_table 中)或(record_id 在 new_table 中,但它的最新条目具有不同的 data_field)

insert it into the new_table and get the index_id

其他

get the latest entry index_id for that record_id from the new_table_index

总是

insert the index_id and date into the new_table_index

关于实现此目的的最佳方法有什么想法吗?我对 MySQL 的了解还不够先进,无法将所有这些放在一起。当我尝试用 PHP 编写脚本时,它用完了 3GB 内存,然后失败了。其他建议或疑问???非常感谢!

最佳答案

你可以使用这个:

new_table
* date
* record_id (pk)
* data_field


INSERT INTO new_table (date,record_id,data_field)
SELECT date, record_id, data_field FROM old_table
ON DUPLICATE KEY UPDATE date=old_table.data, data_field=old_table.data_field;

记录 id 是主键,可以将相同的插入添加到旧表中的插入下方。

参见 mySQL

关于php - 需要 MySQL INSERT - 对具有数百万条记录的表进行 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/662877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com