Edit report at http://bugs.php.net/bug.php?id=53458&edit=1
ID: 53458 Updated by: [email protected] Reported by: don at smugmug dot com Summary: Non-linear performance degradation on certain prepared SELECT queries Status: Open Type: Bug Package: PDO related Operating System: CentOS 5.5 PHP Version: 5.3.3 Block user comment: N Private report: N New Comment: from a twitter conversation with Don, the heart of this issue is that the there appears to be a difference in the performance of fetch() or fetchAll() depending on whether query() or prepare() + execute() were used. Given that query() is really just prepare() + execute() under the covers, it is difficult to explain this difference. Previous Comments: ------------------------------------------------------------------------ [2010-12-03 03:36:14] don at smugmug dot com FYI, setting PDO::MYSQL_ATTR_USE_BUFFERED_QUERY to true/false didn't have a large impact. Still ~10X slower than any of the other methods either way. (Buffered was slightly faster) ------------------------------------------------------------------------ [2010-12-02 23:39:10] don at smugmug dot com Here's my PHP build configuration: './configure' '--enable-exif' '--with-gd' '--enable-gd-native-ttf' '--with-jpeg- dir=/usr' '--with-png-dir=/usr' '--with-freetype-dir=/usr' '--with-zlib' '-- enable-inline-optimization' '--with-bz2' '--with-apxs2' '--with-xmlrpc' '--with- curl' '--with-libdir=lib64' '--with-pdo-mysql=mysqlnd' '--with-mcrypt' '--enable- bcmath' '--with-gmp' '--enable-mbstring' '--with-mysql=mysqlnd' '--with-openssl' '--with-mysqli=mysqlnd' ------------------------------------------------------------------------ [2010-12-02 23:29:50] don at smugmug dot com Description: ------------ When retrieving results from prepared PDO statements against MySQL, we get performance that diverges from expected by 10X or more on results as low as 10000 rows. This only occurs for 'SELECT ... WHERE Id IN ( .. )' queries. The attached script provides two PDO prepared approaches ('row-prepared', default, and 'all-prepared') as well as a variety of control methods that use non-prepared PDO queries, straight MySQL, and prepared queries using MySQLi. Only PDO with prepared queries exhibits the problem. If the query is broken up into chunks that return 1000 rows or less prior to execution, then combined afterwards in PHP, performance is as expected. Test script: --------------- You can get the sample script from: http://www.smugmug.com/test/pdo-problem.php.gz Expected result: ---------------- pdo-problem.php?type=row-prepared and pdo-problem.php?type=all-prepared should return in ~0.5s, like the other types (row, all, chunk, mysql, mysqli). Actual result: -------------- pdo-problem.php?type=row-prepared and pdo-problem.php?type=all-prepared return in ~6s instead of ~0.5s ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=53458&edit=1
