MySQL tries to optimize your queries by finding indexed columns.
Example: Suppose you have a 200000 order records that you'll be searching by customer id and order date.
You could index the customer id field. MySQL would optimize its search to find the rows with the required customer id. Presumably there would not be a large number of rows for next part of the search, by date.
Basically, you want to index a column if there are a large number of rows and if you'll be searching by that column value on a regular basis. In the example above, you can see that a customer id search might be a regular event.
Some tables have 'compound keys': For example, suppose you sold stuff to big companies that had lots of different buyers. You might have a 'CompanyBuyer' table where there was a compound key of 'companyID' and BuyerID. If there were enough rows to warrant it (you'd know this if your searches take too long to return values), you'd want to do a compound indiex.
As a rule, you'll index the primary key of tables with a lot of rows, and you'll index columns where these values are 'foreign keys':
Example: I'd index the ID column of my Customer table, and I index the CustomerID column of my Order table. I index the ID column of my INvoice table, and I index the OrderID column of the INnvoice table.