gpt4 book ai didi

mysql - Ruby on Rails : ActiveRecords' first_or_create is very slow

转载 作者:行者123 更新时间:2023-11-29 18:28:31 26 4
gpt4 key购买 nike

我有一个 ruby​​ 脚本,可以将 XML 文件导入 MySQL 数据库。它通过循环遍历 XML 文件中的元素来完成此操作,最后

table.where(
value: e['value'],
...
).first_or_create

该脚本必须处理大量数据,其中大部分数据已经在数据库中。因此,它的运行速度非常慢,因为first_or_create 显然会触发很多 SELECT 查询。

有什么办法可以更快地处理这个问题吗?与连接管理有关吗?

谢谢

最佳答案

first_or_create 当然是一种方便的方法,它不太关心更大数据集上的性能。

确保所有索引均已就位。

提高性能的第一个明显方法是:因为每个创建语句都包含在 begincommit 事务 block 中。一次插入即 3 个查询。您可以将整个循环放在 transaction block 中 - 这将为您赢得一些时间,因为它只会执行 begincommit 一次。

请记住,与数据库之间的往返需要相当长的时间,因此将多个语句合并为一个语句是一个明显的性能提升。尝试创建一个 SELECT 查询来查找一批(假设有 1000 条)记录。 DB 将返回 200 个查询不存在,您可以继续为这 200 个查询构建一个 INSERT 语句。

始终执行测量并始终尝试制定您想要达到的性能级别,以免代码过于冗长。

关于mysql - Ruby on Rails : ActiveRecords' first_or_create is very slow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941091/

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