我想知道将多维值数组插入数据库的最佳方法 - 特别是两个表?我创建了以下 foreach 循环,该循环创建一个将所有记录插入到一个表中的查询:
foreach($newPosts as $value) {
if(!isset($postQuery)) {
$postQuery = "INSERT INTO posts (primay_key, col1, col2, col3, col4) VALUES ('$value[0]', FROM_UNIXTIME($value[4]), '$value[2]', '$value[1]', '$value[3]')";
} else {
$postQuery .= "('$value[0]', FROM_UNIXTIME($value[4]), '$value[2]', '$value[1]', '$value[3]')";
}
}
我想将其中一个值存储在一个单独的表中,因为该值特别大并且该行的格式为 Longtext。查询数据库时也很少调用此值。我假设将其移动到第二个表中会提高第一个表的查询速度?这是对的吗?
如果我将此值移动到第二个表中,我想将表与第一个表中的primary_key链接,这是一个自动递增值。如何遍历此多维数组并将数据插入两个表中,同时将第一个表的primary_key插入第二个表?我知道如果我一次运行一个查询,我可以使用 LAST_INSERT_ID()。不过,某些更新会插入数百行,所以我不想这样做。
提前感谢!
我假设将其移动到第二个表中会提高第一个表的查询速度?这是对的吗?
不一定。它只会影响性能
- 如果大列被索引(这不太可能,因为MySQL限制了索引字段的大小)
- 如果您的查询定期执行全表扫描
- 如果该值在大部分情况下为 null(超过大约三分之一)
正如您所说,通过将多插入拆分为 2 个表,您将失去多插入的好处。因此,正如您所建议的,您唯一的选择是一次插入一条记录并读回插入 ID,或者(具有大量代码和复杂性)使用序列生成器并预分配多个记录 ID。