[英]Zend_Db and unbuffered queries
我有一个运行时间很长的查询,我尝试通过一个无缓冲的pdo语句来获取(请参见下面的代码)。 但是,当我无缓冲地“执行”查询或执行“ fetchAll”时,计时(也请参见下文)并没有真正改变...我认为无缓冲的只是执行查询并给我一个游标?
get_db函数返回一个Zend_Db对象。
l('Start 1');
$sql = get_db('ATO')->select()
... Big query...
->assemble();
l('Assembled');
get_db('APNS')->query($sql)->fetchAll();
l('All fetched... Going again!');
$PDOStatement = get_db('ATO')->getConnection()
->prepare($sql,
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false));
l('prepared');
if ( $PDOStatement->execute() === false ) {
l(':(');
exit(1);
}
l('fetching');
while ( ($PDOrow = $PDOStatement->fetch()) !== false ) {
}
l ('all done');
function l($t) {
static $start = null;
if ( $start === null ) {
$start = microtime(true);
}
echo sprintf("[%0.5f] %s\n", microtime(true) - $start, $t);
}
和时间:
[0.00000] Start 1
[0.02262] Assembled
[214.69091] All fetched... Going again!
[214.69105] prepared
[417.01584] fetching
[420.55217] all done
如您所见,获取所有和未缓冲的变体几乎没有区别。
我在这里可能做错了什么?
谢谢!
您错了,因为您尝试使用无缓冲查询来加快速度。
每种方式都有其优点和缺点,但与时间的关系微弱。
阅读手册缓冲和非缓冲查询
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.