Christian Ehmig wrote:
> Hi!
>
> Some time ago I noticed that Zend_DB and especially Zend_Db_Adapter_Abstract
> prepare ANY statement except when you use the following code fragment:
>
> $result = $db->getConnection()->exec('DROP TABLE bugs');
>
> The methodology of preparing each statement is necessary for Oracle as far
> as I remember. Regarding MySQL it has a huge impact on performance instead!
> The one and only time you need to prepare a statement in MySQL is if you use
> the prepared query several times with different values bound to the ?
> parameters.
>
> I compared the Zend:DB MySQL adapters to ADO, Pear and Native PHP code
> inserting 100.000 rows.
>
> Code looked something like this:
>
> for ($i = 0; $i < 100.000; $i++) {
>
> $data = array(
> 'text' => 'somedummytext'
> );
>
> $db->insert('testtable', $data);
> }
>
> Now, the Zend MySQL adapters send 200.000 queries to the mysql server in
> this case, a "prepare & execute" for each call to $db->insert().
>
> This resulted in double execution time compared to native php access in
> other words a performance drop of 100%! Of course, SELECT statements
> (fetchRow, fetchAll, etc.) are prepared, too. Just imagine you use around
> 100 select queries to render a site - each select will be individually
> prepared, although this is completely nonsense in my opinion.
>
> Are there any plans for disabling the "automatic prepare feature" or any
> other hints on this issue?
Yes, actually, this is a known issue and planned to be completed soon:
http://framework.zend.com/issues/browse/ZF-1398
Please feel free to jump in and contribute!
http://framework.zend.com/community/contribute
Best regards,
Darby