热线电话:13121318867

登录
2019-02-18 阅读量: 739
prepare与sql的开销

问题描述:

相同的SQL查询语句用prepare与query的开销是一样大的吗?
$sql = $pdo -> prepare("select * from table");
$sql -> execute();
$rs = $sql -> fetch(PDO :: FETCH_ASSOC);

$sql = $pdo -> query("select * from table");
$rs = $go -> fetch(PDO :: FETCH_ASSOC);

例如上面prepare与query查询是否效率一样?(忽略SQL语句注入)。
单条查询结果用哪一条比较好?
prepare是否在查询时会向数据库至少发送两次数据库?

exec是否更适用于update、insert into?

解决方法:

PHP 的 PDO里面有个选项,叫 ATTR_EMULATE_PREPARES

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

正式的prepare需要把这个设置成false。

正式的prepare 需要和数据库服务器通信两次,一次prepare,一次“填空”。
query和exec只需要一次。

所以看起来prepare会慢。

但是prepare 之后,“填空”的速度是优化过的,格外快。

所以结论是,如果SQL服务器在本地,prepare和query在执行一次的时候几乎是速度一样的。
如果需要插入100次数据,需要prepare一次,“填空”100次,同等条件下(SQL服务器网络延迟相同),prepare的速度远远优于一条一条query执行。
如果客户端和SQL服务器距离差半个地球,那么query可能更快。

0.0000
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子