gpt4 book ai didi

php - 棘手的 MySQL 批量查询

转载 作者:行者123 更新时间:2023-11-29 01:45:09 25 4
gpt4 key购买 nike

我有一个每晚更新的事件数据库。单个事件具有跨三个(或更多)表的信息。最近更新量导致我的 MySQL 引擎非常慢,以至于在插入新事件时我的其他查询被卡住。为了加快处理速度,我想进行一系列批量查询,而不必分别执行每个查询,我觉得这是很大一部分开销。

问题是因为数据分布在多个表中,这是我插入单个事件所要做的:

   (in Mysql) INSERT INTO 'locations' (...) VALUES (...) ON DUPLICATE KEY UPDATE ...
(in php get the last inserted id into variable $locationID)
(in Mysql) INSERT INTO 'event_info' (...) VALUES ($locationID, ...) ON DUPLICATE KEY UPDATE...
(in php get the last inserted id into variable $eventID)
(in Mysql) INSERT INTO 'event_times' (...) VALUES ($eventID, ...) ON DUPLICATE KEY UPDATE...

我不是在寻求设计表方面的帮助,但如您所见,插入单个事件需要至少三个插入每个都取决于从前一个中获取 ID。这就是为什么我不知道从哪里开始将其变成批处理请求的原因。将此流程设计成批处理请求的任何帮助都很棒,谢谢!

编辑: 我之前可能已经有了位置或事件信息,这就是为什么 ON DUPLICATE KEY UPDATE 部分在那里,如果它已经在数据库中,我会得到旧的 ID。在插入之前我不知道它是新数据还是已经存在于数据库中。 (正因为如此,除非我误会了,否则我不能做预分配 ID 的事情,因为这每次都会假设一个新的 ID。)

最佳答案

不要使用自动递增的列 - 在插入之前预先分配您的引用 ID。这样您就可以使用批量插入并删除依赖项。

更新:

  1. 从数据库中选择任何现有 ID(最好是对所有已知数据进行一次选择)。

  2. 丰富数据以使用任何已知 ID 插入。 (为每个项目计算一个键,该键与数据库中表的主键相对应,使用它来更新数据库中的 id 项目) - 您希望最终将数据拆分为您知道的项目数据库,因此有一个已知的 id - 和数据库中不存在的数据,因此需要分配 key 。我假设您的表有一个主键,而不仅仅是 ID - 否则数据库将如何知道您已经在数据库中拥有数据。

  3. 为没有 ID 的任何记录分配新 ID。

  4. 批量替换数据库中的数据(一条语句插入多行)。

关于php - 棘手的 MySQL 批量查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901683/

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