这个INSERT配置文件是否适用于我的面向数据库的Mysql InnoDB?

时间:2013-08-06 20:46:44

标签: mysql innodb insert-statement

我想知道以下主题(关于Mysql上的INSERT - InnoDB表)。

我有一个系统可以做其他系统2事情

  1. 向用户宣传简报
  2. 向某类用户发送大量电子邮件
  3. 现在,用户将增长到4k,据说可能达到40k

    当我发送大量电子邮件时,我正在为WHILE中的每个用户 id 进行INSERT(循环遍历所有用户)。

    我有两个问题:

    1. 这是最好的方法吗?
    2. 当用户达到40K(40.000用户)时,mysql服务器会支持吗?
    3. 感谢,

      这是我正在使用的代码

          $query_write_mass = "SELECT id FROM mya_users ORDER by artist_real_address ASC";
          $result_write_mass = $db->prepare($query_write_mass);
          $result_write_mass->execute();
          while ( list($receiver_id) = $result_write_mass->fetch(PDO::FETCH_BOTH) ) { 
      
             $stmt = $db->prepare
               ("INSERT INTO inbox(folder_id, sender_id, sender_type, receiver_id, 
                 receiver_type, title, message_body, time, date, flag, spam) 
                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
      
                  $stmt->bindValue(1, 0, PDO::PARAM_INT);
                  $stmt->bindValue(2, 0, PDO::PARAM_INT);
                  $stmt->bindValue(3, 'x', PDO::PARAM_STR);
                  $stmt->bindValue(4, $receiver_id, PDO::PARAM_INT);
                  $stmt->bindValue(5, $receiver_type, PDO::PARAM_STR);
                  $stmt->bindValue(6, $_POST['title'], PDO::PARAM_STR);
                  $stmt->bindValue(7, $_POST['body'], PDO::PARAM_STR);
                  $stmt->bindValue(8, date("G:i:s"), PDO::PARAM_STR);
                  $stmt->bindValue(9, date("Y-m-d"), PDO::PARAM_STR);
                  $stmt->bindValue(10, 'n', PDO::PARAM_STR);
                  $stmt->bindValue(11, '', PDO::PARAM_STR);                                                                                                                                                                                                   
      
                  $stmt->execute();   
           }
      

      这适用于我的内部电子邮件系统的群发电子邮件。

      更新

      您可以在我的其他帖子(已解决)@

      中找到这个问题的正确答案

      multiple INSERTS and keeping PDO prepared statement security

2 个答案:

答案 0 :(得分:1)

如果您询问MySql是否可以处理40k插入,那么假设空间可用并且机器合理,那么这将没有问题。我们的系统每天都会插入数十万行。

答案 1 :(得分:1)

1)否。如果可以,一次插入几行:

INSERT INTO t VALUES (1, 'something'), (2, 'something else')...

如果您为所有用户插入类似的记录,那么更好的方法是:

INSERT INTO t
SELECT 
    "something to insert for all users into t's column 1",
    "something to insert for all users into t's column 2",
    user.field1,
    user.field2
FROM user
-- WHERE some_condition_on_user_table

2)是的,除非你继续进行while循环(但即便如此,它也可能正常工作)