首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列多插入未命名和电子邮件检查

阵列多插入未命名和电子邮件检查
EN

Stack Overflow用户
提问于 2010-09-12 05:34:14
回答 2查看 241关注 0票数 0

我有一个数组,我想检查用户名和电子邮件值是否存在于数据库中,如果不存在,则在数据库中插入用户名和电子邮件值。使用多个插入件,因为大约有80000个插入件需要预成型。

代码语言:javascript
复制
$arr1 = Array
(
    [0] => Array       ( [Username] => uname1,  [Email] => email1  )

    [1] => Array   (  [Username] => uname2,  [Email] => email2  )

    [2] => Array   (  [Username] => uname3,  [Email] => email3 )

)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-12 05:44:32

具有80000个INSERT的SQL语句的运行速度将比80000个单独的INSERT慢,因为不需要构建整体的、多INSERT的SQL语句字符串。要覆盖现有行,您将需要一个主键来确保覆盖重复的记录:http://dev.mysql.com/doc/refman/5.1/en/replace.html

代码语言:javascript
复制
foreach ($arr1 as $user){
    $sql = "REPLACE INTO `users` SET `Username`='" . mysql_escape_string($user["Username"]) . "', `Email`='" . mysql_escape_string($user["Email"]) . "'";
    mysql_query($sql);
}

我的代码假设Username是主键。如果不是,则添加到SET子句以包括主键。如果Username是您的主键,请考虑使用基于整数的主键,因为基于字符串的主键速度很慢。

票数 1
EN

Stack Overflow用户

发布于 2010-09-12 06:27:30

最简单的方法是在username+email上创建一个唯一的索引。然后,您可以直接执行插入忽略操作。尽管您可能不希望使用PHP大容量插入80000条记录,除非您还调整了超时参数。最好将其分解为批量插入,比方说每次插入500个。然后它会有很好的伸缩性。

对唯一索引使用INSERT IGNORE将只插入索引中还没有匹配的记录。不要进行单次插入和/或查找。虽然这将是规模,但它将是缓慢的。分块你的数据,它会扩展和执行的很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3692742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档