Categories
Archives
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- July 2009
- June 2009
- May 2009
- March 2009
- February 2009
- January 2009
- August 2008
- July 2008
- June 2008
- November 2007
- October 2007
- July 2007
- June 2007
- April 2007
- January 2007
- September 2006
- August 2006
- July 2006
- June 2006
- May 2006
- April 2006
- March 2006
Tools




PHP: mysql or mysqli?
As you may know, I’ve been spending a lot of time trying to make the Fake Name Generator as fast as possible. I’ve started using a CDN, I’ve made minor code tweaks (like doing ++$i instead of $i++), added APC caching, and a bunch of other stuff, but still feel that the core of the FNG is a bit slow.
Currently the code uses PHP’s mysql extension. I’ve read in several places that mysqli is better, faster, more attractive, gets more girls, etc, but have been unable to find any remotely recent benchmarks to prove it. I don’t care if the OO approach is cleaner looking, I just want it to be faster.
So I put together a bit of a benchmark (very unscientific) to see if it is faster or not for my very specific needs: I want to generate 50,000 names as fast as possible. Each name requires 4 SQL queries, so I end up making 200,000 queries (yikes!).
For my first attempt, I simply replaced all of my procedural mysql stuff with the OO mysqli equivalent. In other words, I connected to the database, ran each query, then got the result out of the result set. This had absolutely no improvement over my current method of getting data; sometimes mysql was a second or two faster, sometimes mysqli was a second or two faster.
For my second attempt, I used the mysqli::multi_query method to combine the 4 SQL queries per name down to a single trip to the database per name, dropping my total number of trips to the database from 200,000 to 50,000. This yielded a drastic 66% speed improvement. There are several methods in my name generation class that generate multiple queries, so using this technique will make the name generator significantly faster.
Conclusion: As a drop-in replacement for the standard mysql extension, mysqli does not appear to be any faster, even for lots of queries. However, the mysqli::multi_query method makes it possible to shave large percentages of time off of your script’s execution time.
Update (2−4−2010): I just ran an order for 10,000,000 names (with addresses, occupations, etc). This process used to take about 25 hours to run on my server. With the new code it ran in only 15 hours. That is a 40% speed improvement for about 45 minutes of effort! So my conclusion is yes, mysqli can be much faster in certain situations.
Related Posts: