What about making the table INNODB? If you make INNODB's buffer large enough, the high activity data/index blocks are retained in memory. INNODB's non blocking read and single statement transaction default should make the "transaction overhead" minimal and INNODB doesn't have any of the HEAP table restrictions. Caching the data closer to the application layer normally gives better performance than OS level cache or Ram disk.
-----Original Message----- From: Matt W [mailto:[EMAIL PROTECTED] Sent: Sunday, November 09, 2003 4:55 PM To: [EMAIL PROTECTED] Subject: Re: Strategies for optimizing a read-only table Hi Jeremy, Sorry, it seems like I'm saying this a lot lately. Is it not true that if the whole table will fit in [free] RAM, that the OS will cache the file data and there is no need for a RAM disk. I don't really see how performance would be any different than using a RAM disk. Either way, you will still have the overhead of the filesystem calls, even if data isn't actually read from disk, unlike with a HEAP table. Jonathan, I think a packed table would actually make things slower once the data is cached (overhead of unpacking the data). It's just faster when the data has to be *physically* read from disk, since the data is smaller. If disk space isn't an issue and the table doesn't have any TEXT/BLOB columns, make the rows fixed length if they aren't (change VARCHAR > CHAR). This will give a small performance improvement. Also, if you don't have any TEXT/BLOB columns, you could load the data into a HEAP table, which *may* make reads *slightly* faster -- depending on your queries. Remember, with HEAP tables, indexes can't be used in all cases that MyISAM can. You can only search on indexes with =, <=>, IS NULL, and IN (); no range searches with <, >, BETWEEN, etc.; and you can only use the full index length, no prefixes. However, none of this is true in 4.1+, since you can have BTREE indexes with HEAP tables, not just HASH. :-) But you know what should actually be the best thing for your read-only table? MySQL 4's query cache! :-) Have you thought about this? Or do your queries differ too much that the cache can't be used? Hope this helps. Matt ----- Original Message ----- From: "Jeremy Zawodny" Sent: Saturday, November 08, 2003 11:48 PM Subject: Re: Strategies for optimizing a read-only table > On Tue, Nov 04, 2003 at 08:45:08PM -0500, Jonathan Terhorst wrote: > > > > I could have sworn I posted this once before, but apparently it got > > lost somewhere. Apologies if you're seeing this twice: > > > > I'm wondering what I can do with MySQL to optimize reads (SELECTs) > > on a read-only table where data will never be INSERTed or > > UPDATEd. Okay, that's not entirely correct--the database will be > > rebuilt every night but it's small (~20,000 rows) and all the > > writing will take place at once, when the DB is offline to users. In > > contrast we anticipate read activity on the DB to be high, making it > > worth putting some thought into this. So far my only thoughts have > > been a) myisampack and b) to index every single column that our > > application searches on, since the calculations needed to build said > > indices can be performed once and forgotten. (Disk space isn't > > really an issue but myisampack is said to speed up individual row > > retrieval.) > > > > Any other ideas? I've searched for a way to manually mark MySQL > > tables read-only, but to no avail. Thanks, > > Will the whole table fit comfortable in RAM? If so, you could store > it in a ram disk to prevent disk I/O from ever getting in the way. > > Jeremy -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]