Php id为的大容量数据库插入

Php id为的大容量数据库插入,php,mysql,Php,Mysql,我有数十万个元素要插入到数据库中。我意识到对每个元素调用insert语句的成本太高,需要减少开销。 我确认每个插入可以指定多个数据元素,例如 INSERT INTO example (Parent, DataNameID) VALUES (1,1), (1,2) 我的问题是,由于“DataName”对每个元素都不断重复,所以我认为如果我将这些字符串名称存储在另一个表中并引用它,它将优化空间。 然而,这给我的批量插入的想法带来了问题,现在需要一种在调用批量插入之前根据名称实际计算ID的方法 有什

我有数十万个元素要插入到数据库中。我意识到对每个元素调用insert语句的成本太高,需要减少开销。 我确认每个插入可以指定多个数据元素,例如

INSERT INTO example (Parent, DataNameID) VALUES (1,1), (1,2)
我的问题是,由于“DataName”对每个元素都不断重复,所以我认为如果我将这些字符串名称存储在另一个表中并引用它,它将优化空间。 然而,这给我的批量插入的想法带来了问题,现在需要一种在调用批量插入之前根据名称实际计算ID的方法

有什么建议吗? 我是否应该简单地反规范化并每次将数据作为普通字符串插入表中? 另外,当字符串查询量接近1.2MB时,字符串大小的限制是什么


我正在使用PHP和MySQL后端

首先,您应该在表中插入名称。 然后调用
LAST\u INSERT\u ID()
获取ID

比你能做你的正常插入


如果您的表是基于MYisam的,您可以使用
INSERT DELAYED
来提高性能:

首先您应该在表中插入名称。 然后调用
LAST\u INSERT\u ID()
获取ID

比你能做你的正常插入


如果您的表是基于MYisam的,您可以使用
INSERT DELAYED
来提高性能:

您可能需要仔细阅读。它很好用,我一直在用它


编辑:答案只针对个别插入的缓慢性。正如@bemace所指出的,它并没有提到字符串ID。

您可能需要仔细阅读。它很好用,我一直在用它


编辑:答案只针对个别插入的缓慢性。正如@bemace所指出的,它没有提到字符串ID。

您没有给我们提供很多关于数据库结构或大小的信息,但在这种情况下,绝对规范化可能不值得这么麻烦

但是,如果您希望使其规范化,并且字符串已经在另一个表中(我们称之为
datanames
),可以执行以下操作

INSERT INTO example (Parent, DataNameID) VALUES
(1, (select id from datanames where name='Foo')),
(1, (select id from datanames where name='Bar'))

您没有给我们提供关于数据库结构或大小的很多信息,但在这种情况下,绝对规范化可能不值得这么麻烦

但是,如果您希望使其规范化,并且字符串已经在另一个表中(我们称之为
datanames
),可以执行以下操作

INSERT INTO example (Parent, DataNameID) VALUES
(1, (select id from datanames where name='Foo')),
(1, (select id from datanames where name='Bar'))

如果只处理数千个元素,为什么调用每个元素的insert代价太高?数据来自哪里?更正:数十万,数据来自xml格式的文件。我有一台2.5千兆赫的机器,几乎需要2分钟!我不知道要优化什么,但上面指出的事实是,我只是有一个带有insert语句的循环。如果只处理数千个元素,为什么调用每个元素的insert代价太高?数据来自哪里?更正:数十万,数据来自xml格式的文件。我有一台2.5千兆赫的机器,几乎需要2分钟!我不知道要优化什么,但根据上面指出的事实,我只是有一个带有insert语句的循环。
insert DELAYED
:在MySQL数据库中,实际的insert当然需要更长的时间,只是因为代码没有等待完成,所以脚本插入速度确实更快。请注意
INSERT DELAYED
:在MySQL数据库中,实际插入当然需要更长的时间,只是因为代码不等待完成,所以插入脚本的速度确实更快。这根本不能解决查找字符串ID的问题。这根本不能解决查找字符串ID的问题