是否可以使用单个查询将多个实体插入数据库?
当我使用一个例子时here http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/batch-processing.html我可以在 Web 调试器中看到几个查询
更新于 2012 年 8 月 23 日
我找到了以下相关链接。我希望它能帮助人们理解批处理:
- http://www.doctrine-project.org/blog/doctrine2-batch-processing.html http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
- 学说2 - 如何提高冲水效率? https://stackoverflow.com/questions/8707486/doctrine2-how-to-improve-flush-efficiency
- 原则 2:批量处理引用其他实体的实体插入时的奇怪行为 https://stackoverflow.com/questions/7431794/doctrine-2-weird-behavior-while-batch-processing-inserts-of-entities-that-refer
主要内容:
有些人似乎想知道为什么 Doctrine 不使用
多重插入(插入 (...) 值 (...), (...), (...), ...
首先,此语法仅在 mysql 和较新的 postgresql 版本上支持。其次,没有简单的方法可以掌握所有内容。
使用时在这样的多插入中生成的标识符
AUTO_INCRMENT 或 SERIAL 和 ORM 需要身份标识符
对象的管理。最后,插入性能很少是最重要的
ORM 的瓶颈。普通插入速度足够快
大多数情况下,如果您确实想要快速批量插入,那么
无论如何,多重插入不是最好的方法,即 Postgres COPY 或 Mysql
LOAD DATA INFILE 速度快了几个数量级。
这些就是为什么不值得花精力去实现一个在 mysql 和 postgresql 上执行多重插入的抽象
一个 ORM。
我希望这能消除一些疑问。
我认为会有多个插入语句,但每个“刷新”调用只有一个对数据库的查询。
正如这里提到的http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html
每个“persist”都会向当前UnitOfWork添加一个操作,然后是对EntityManager#flush()的调用,它实际上会写入数据库(将UnitOfWork的所有操作封装在单个事务中)。
但我没有检查我上面描述的行为是否是实际行为。
此致,
克里斯托夫
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)