4

如果你会考虑下表

table_A (id (PK), value1, value2)

如果我要插入一组数据,例如:(1,5), (1,3), (3,5)

我可以执行如下查询:

INSERT INTO table_A (value1, value2) VALUES (1,5), (1,3), (3,5)

这会奏效。但是,有人告诉我准备好的陈述会更好。调查准备好的陈述似乎我必须做这样的事情

$stmt = $dbh->prepare("INSERT INTO table_A (value1, value2) VALUES (?, ?)");
$stmt->bindParam(1, $value1);
$stmt->bindParam(2, $value2);

//for each set of values
$value1 = 1;
$value2 = 5;
$stmt->execute();

我的问题是,准备好的语句如何比第一种方法更好(性能方面)?一个是单个查询,另一个涉及同一查询的多次执行。第一个查询是否被编译成三个单独的查询或其他什么?

4

1 回答 1

4

当您只插入一次时,准备好的语句本身不会更快。但是,如果您需要多次运行相同的插入,您将节省解析查询和准备查询计划所需的时间。准备好的语句插入将被解析一次,它的计划将被缓存,然后重用于所有后续插入。另一方面,具有多个嵌入值的语句在每次运行新语句时都需要重新处理,从而减慢处理速度。

另一方面,网络往返也很慢。进行额外的往返可能比解析和准备查询计划要慢,因此您应该在以一种或另一种方式做出决定之前进行分析。

于 2012-08-30T00:19:11.027 回答