Not to be flip here, but you should have as many indexes as you need, and no more. Indexes must be maintained whenever you add, delete, or update a row, so this overhead must be taken into account when creating an index.
There are several reasons why the query optimizer might use an index, such as selecting rows via a WHERE clause, for JOIN and UNION operations, and for ORDER BY operations, to name a few. There is no guarantee that the optimizer will in fact use a particular index just because it happens to exist. The theory is that it "knows better than you" what the situation is, and will decide which indexes to use (or not use) based on its evaluation of the optimum query plan.
So, you should create an index on a column (or set of columns) because you have identified situations where it will be used. Don't create one for lack of a better idea...
Jeff Mason
[email protected]