gpt4 book ai didi

php - mysql::如果插入是什么类型?

转载 作者:行者123 更新时间:2023-11-30 23:40:05 25 4
gpt4 key购买 nike

背景

我基本上有一个数组,

这个数组有以下格式

Array(    [0] => Array        (            [co_id] => 1            [co_fname] => First            [co_lname] => Last            [co_company] => Company            [co_address] => Address            [co_ddi] => ddinumber            [co_mobile] => mobilenumber            [co_fax] =>             [co_email] => email@example.com            [co_usms] => 1            [co_ufax] => 0            [co_uemail] => 1            [a_id] => 3        ))

我正在遍历这个数组并创建一些插入语句。

一共有三个表,Message_email, Message_fax, Message_sms。

如果联系人的 co_u(sms/fax/email) 为 1,我将联系人 ID 和相应的联系信息 (co_mobile/co_fax/co_email) 添加到其相应的数组 ($mobile/$fax/$sms)。

数组的信息随后被添加到表中。


问题

这些数组可能会变得非常大(想想超过 20 万个联系人)。

我应该吗?

a) 创建单个批量插入语句。
b) 创建几个较小的批量插入语句。
c) 为每个联系人做一个插入语句。

速度不错,但问题不大。可靠性是最重要的。

马特

最佳答案

我通常根据 SQL 查询的长度进行批处理。我将构建查询,每次追加直到它达到某个简单的长度(10000 个字符是一个不错的长度),然后将它刷新到服务器:

$query = 'INSERT INTO FOO (values) VALUES ';
$separator = '';
$values = '';
foreach ($rows as $row) {
$values .= $separator . '('.$row.')';
$separator = ', ';
if (strlen($values) >= 10000) {
query($query . $values);
$values = '';
$separator = '';
}
}
if (!empty($values)) query($query . $values);

这很好,因为它补偿了小插入 (int, int) 和大插入 (int, text, text)...另外,您不会冒险查询花费的时间太长并使您的连接超时(或阻止其他用户的时间太长)。对于我的数据集,10k 个字符似乎是最佳选择。由于 MAX_PACKET 通常为 1mb,您可以高达 750k 左右并且仍然有足够的错误空间(取决于您的数据集)。但我宁愿使用一堆小批量也不愿使用大批量......

关于php - mysql::如果插入是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com