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