Hudzilla.org - the homepage of Paul Hudson
Contents > Performance > Optimising your SQL Wish List | Report Bug | About Me ]

18.2.11     Consider splitting off variable-length fields

This is NOT the latest copy of this book; click here for the latest version.

There is a speed advantage to using fixed-length fields because MySQL can search through them quicker than through variable-length fields. However, if you have just one variable-length field in a table, the entire table is considered variable-length. As such, it is important to look at your tables to see whether they could easily become fixed-length and trying it out.

Consider messageboards, for example - they contain fields such as the ID number of the poster, the ID number of the message, the title of the message, the date it was posted, and, of course, the actual body of the message. Of those, the two ID numbers and the date are all integers (a Unix timestamp would do fine for the date), and the message title can be a CHAR(100) - long enough for most messages, and then some. However, the text of the message should really be a TEXT data type because messages should be able to have any length - this would make the entire table variable-length, hence slowing things down.

Now consider that your average messageboard visitor, unless you get people posting particularly important messages, is likely to only read a few of the messages posted. This means that the majority of their database accesses will be caused by the generation of the messageboard index, where current topics are listed. Given that when a visitor goes to a messageboard they might see a list of 100 messages posted, and from that list they would only read perhaps 10, it is clear to see that it is a major waste to have message text inside each message.

So, the ideal solution is to split off each message into two tables, for example "mbmsgs" and "mbmsgstext" - one to hold the key information about a message (who posted it, what its title is, etc), and the other to hold the message text. With this solution, the table that is read the most (mbmsgs) would be fixed-length, making the generation of the messageboard index faster.





<< 18.2.10 Load data intelligently   18.2.12 Be wary of locks >>
Table of Contents
Want to see this stuff in print? PHP in a Nutshell takes the core topics covered here, adds in thousands of edits from the editorial team and myself, and combines them to make an unbeatable reference for PHP programmers at all levels.



My latest book has hundreds more tips on how to use PHP, Apache, and MySQL, plus Perl, Python, shell scripts, performance tuning, and more!



Top-right shadow
 
Bottom-left shadow Bottom shadow

Comments from other readers
Be the first to add a comment to this chapter!



Add comment
Please note that by posting a comment here you are committing it to the public domain. This is important so that others can make use of your code themselves, and also so that I can incorporate helpful notes directly into the main text. Comments are limited to 2000 characters in length.

If you are reporting an error in the content, please tell me directly.

Your name/email address:
Your comment:
 
Now, in order to verify that you're a real person, please answer this simple question: what is two plus nine?
The answer is:
(please write in
numbers, eg 19)


Top-right shadow
 
Bottom-left shadow Bottom shadow