【问题标题】:should i use insert select or just loop through with insert?我应该使用插入选择还是只使用插入循环?
【发布时间】:2009-08-14 13:40:27
【问题描述】:

我使用以下答案提取了用户名列表:

how to optimize mysql query if i have too many OR operators in my query?

现在我有另一个问题。我有一个仅由 2 列组成的朋友表,请求者和好友都形成了一个复合主键。

现在假设我有一个使用上述 SO 问题的给定用户的 Facebook 朋友数组。

如何在我的网络应用程序中自动让他们成为朋友?

这意味着如果我有一个名为“usera”的用户的 5 个实际朋友。我需要执行 10 个插入语句。

例如:friendA, usera 和 usera,friendA 以便将friendA 反映为usera 的朋友。

我知道插入选择是有效的。但不幸的是,这些朋友的用户名列表是通过使用 IN 子句的 PHP 值数组获得的,正如我上述问题中其他 SO 成员所建议的那样。

那我该怎么办?

我应该

a) 遍历名称并为每个步骤执行 2 个插入语句?

b) 使用插入选择?但是具体怎么做呢?

我的数据库是这样设计的:

1 个名为 users 的表,用户名和 fb_uid,其中用户名是主键,fb_uid 可以为空。

1 个名为 friends 的表,其中一个名为 requestor 的列和另一个名为 buddy 的列。两列形成一个复合键。

当朋友表中有以下数据时,我的网络应用程序中的 2 个人 (usera, userb) 之间建立了友谊:(usera, userb) 和 (userb, usera)。

谢谢。

【问题讨论】:

    标签: php mysql bulkinsert


    【解决方案1】:

    您可以随时进行批量插入。

    INSERT INTO friends (user_id, friend_user_id) VALUES (1, 2), (2, 1)
    

    【讨论】:

    • 使用批量插入是否存在性能问题?我确定我 cna 使用 php 并执行循环来构造单个批量插入。我还应该添加插入忽略还是插入延迟?
    • 批量插入通常比常规插入快,唯一的缺点是值的数量有限制(我相信有一千个)。
    • 如果在批量插入过程中我有重复记录怎么办?之前的成功插入会被放弃吗?
    【解决方案2】:

    我会选择 INSERT SELECT,你可以找到 detailed syntax here

    【讨论】:

    • 你是在暗示这个吗?即使插入选择与 IN 子句结合使用?插入朋友(请求者,好友)中选择'usera',distinct(username) from users where fb_uid in (value1, value2, ...)
    • 我不知道你的数据库是怎么设计的。
    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多