【问题标题】:Speed up insert query mysql加快插入查询mysql
【发布时间】:2012-11-08 21:18:28
【问题描述】:

我想在已经包含 10000 行的现有表中插入大约 10000 行新行。 我需要获取查询的插入 ID,并在循环内的另一个函数中使用该 ID,如下面的代码所示。

foreach($values as $val){
  $sql = "INSERT INTO wp_posts (`post_author`, `post_date`, `post_content`, `post_title`, `post_excerpt`, `post_status`,`post_modified`,`post_type`)
  VALUES('".$val[author]."',NOW(),'".$val[content]."','".$val[title]."','".$val[excerpt]."','published',NOW(),'post')";
  $result = mysql_query($sql);
  $insertid = mysql_insert_id();
  add_post_meta($insertid, $val[metakey], $val[metaval], true );
}

我正在从 CSV 文件中获取 $values 数组的值。截至目前,我每 3 分钟只能插入 20 个新行。 有没有办法加快这种插入速度?

【问题讨论】:

  • 表结构?指数?引擎?
  • 你不能使用像 Navicat 这样的 GUI 来导入这些吗?
  • @jcho360 看起来像一个 Wordpress 数据库
  • 它不应该那么慢(20 行/3 分钟)。优化查询不会解决问题 - 首先考虑您的内存使用情况、网络带宽等。
  • 您可能想尝试在codereview.stackexchange.com 发布此内容。

标签: mysql optimization insert


【解决方案1】:

您可以尝试在 PDO 中使用准备好的语句,看看是否有帮助。

$sql =     "INSERT INTO wp_posts (`post_author`, `post_date`, `post_content`, `post_title`, `post_excerpt`, `post_status`,`post_modified`,`post_type`)
            VALUES(:author,NOW(),:content,:title,:excerpt,'published',NOW(),'post')";
$pdoStatement = $pdoConnexion->prepare($sql);

foreach($values as $val){
    $pdoStatement->bindValue(':author', $val['author'], PDO::PARAM_STR);
    $pdoStatement->bindValue(':content', $val['content'], PDO::PARAM_STR);
    $pdoStatement->bindValue(':title', $val['title'], PDO::PARAM_STR);
    $pdoStatement->bindValue(':excerpt', $val['excerpt'], PDO::PARAM_STR);
    $pdoStatement->execute();
    $insertid = $pdoConnexion->lastInsertId();
    add_post_meta($insertid, $val[metakey], $val[metaval], true );
}

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多