如何优化WordPress数据库中的多个插入

时间:2013-12-18 作者:Przemysław Suszek

我的插件有主文件,另一个文件有sql命令。在第二个文件中,我创建了两个表,并将数据写入其中一个表。但我有问题。在我的私人电脑中,一切正常,但在外部服务器上却不行。如何优化下面的命令我有一个700块的插入物,如下所示:

$wpdb->insert( 
    $ow_table_adres, 
    array( 
        \'id\' => \'\', 
        \'address\' => \'test\', 
        \'kod\' => \'096-024\', 
        \'number\' => \'4\'
    ) 
);

1 个回复
SO网友:gmazzap

优化查询,而不是使用$wpdb->insert 可以使用$wpdb->query 并使用一个插入所有项目的查询。

事实上,根据MySQL documentation:

如果要同时从同一客户端插入多行,请使用具有多个值列表的INSERT语句一次插入多行。这比使用单独的单行INSERT语句快得多(在某些情况下快很多倍)

如果你有一个数组$all_items 其中,每个数组项都是一个具有“address”、“kod”和“number”项的数组,类似于:

$all_items = array(

  array( \'address\' => \'test\', \'kod\' => \'096-024\', \'number\' => \'4\' ), 

  array( \'address\' => \'test2\', \'kod\' => \'096-025\', \'number\' => \'5\' ), 

  array( \'address\' => \'test3\', \'kod\' => \'096-026\', \'number\' => \'6\' ),  

);
那么你可以

$q = "INSERT INTO $ow_table_adres (address, kod, number) VALUES ";

foreach ( $all_items as $an_item ) {
  $q .= $wpdb->prepare(
    "(%s, %s, %d),",
    $an_item[\'address\'], $an_item[\'kod\'], $an_item[\'number\']
  );
}

$q = rtrim( $q, \',\' ) . \';\';

$wpdb->query( $q );

结束