【发布时间】:2020-03-12 04:31:10
【问题描述】:
考虑两个表(我已经简化了一点,实际上有更多相关的表和更多的列):
TABLE 'visit'
-------------
- id (auto increment)
- visit_country
- visit_browser
TABLE 'pageview'
----------------
- id
- visit_id (relates to visit.id)
- page_url
每天,我都想在这些表中插入一个访问量约为 100.000 且点击量约为 400.000 的 PHP 数组。加快这个过程的方法是通过
- 在一个查询中添加多个插入
- 并将所有查询打包成一个事务。
但是,我的问题是,为了插入综合浏览量,需要父访问的 Last Insert ID。在假设使用一个查询插入 1000 次访问的事务中,我不能再使用 PDO 的 lastInsertId() 方法。
理想情况下,我将所有内容都放在一个事务中。一个不太理想的解决方案是插入所有访问并添加一个引用列,然后执行,检查每次访问获得的 ID,然后使用新事务插入命中。但这远非理想。
解决这个问题的方法是什么? ORM之类的Doctrine是如何解决这个问题的(我这里需要通过PDO依赖原始SQL)?
【问题讨论】:
-
这个问题太笼统了。在数据库端使用存储过程进行插入?
-
这里的问题是什么?将整个查询打包成一个事务有什么问题?在普通硬件上插入 100.000 条记录大约需要 2-3 秒。你真的试过了吗?