Hello, all. I just thought I would chime in a few things about this that I have realized the hard way about this question, and see if anyone can help me with my own problem.
MyIsam
First, if you want to search through large samples of text efficiently, you want a FULLTEXT index - this allows people to search things like webpages in a page-ranked "google-style", and it's been really helpful. Only MyISAM can do this.
The fulltext index creates a numeric index of all the words, ranks them by frequency of the word within each document, the length of the word, and the length of the document. The engine uses a formula that combines all of these factors into one value that ranks the results when you search for the terms.
I'm sure plenty of folks in here are familiar with trying to search through a bulletin board or a website for something specific and seeing results that never seem to make any sense - these results are simply counting each specific instance of the words in a document and spitting out the results. It makes the process of finding anything in a large collection extremely annoying.
Innodb
Second, if you want to enforce referential integrity between tables, you must use Innodb. I just found this out today, and I am pretty frustrated, because I need this feature for a system I have already created and populated. If you aren't familiar with referential integrity, (apologies if this is over-simplified) it's really important to enforcing business rules when you are creating a db. If I want to link the primary key from one table to a foreign key in another table and not allow values in the child table that don't exist in the parent already, I have to use Innodb.
A good example of this would be to say "I only want to allow sales offers to be linked to pre-approved customers" - and you have a table of pre-approved customers and a separate table of offers - you would have to create a bunch of application code to enforce this, instead of doing it in the db (both can be done, of course... but that's another discussion). If it was done in the db, it would never allow the offer to be created for a customer who didn't exist in the customer table already.
I found this out the hard way with a system I created from scratch using MyISAM tables (because I needed FULLTEXT). The thing that bugs me the most about this mess is that MySQL created my foreign key constraints and told me everything was cool.
I assumed everything would work if it did that.
I'm sure many of the folks in here have worked with keys instead of foreign key constraints to link tables (I am used to dealing with Oracle products). Can anyone show me an example that would be equivalent? So, what to do now? Create indexes? What's the best way to do something like this:
ALTER TABLE votes ADD CONSTRAINT FK_votes_REFS_citation
FOREIGN KEY (master_id) REFERENCES citation (master_id);
... with keys? Also, I only need to have 3 out of about 20 tables to be fulltext-searchable... Should I just convert the other 17 to Innodb? Will tables using different engines link up efficiently?
Again, I apologize if this is over-simplified or has been answered already. Thanks in advance!