By default, primary keys are indexed. That is because primary keys usually have a "unique" constraint on them, which implies an index (when inserting rows, the DB uses the index to make sure the field is unique without requiring a table scan).
A primary key is used to uniquely identify a record. That way you have an unambigous way to update, delete, or reference data. Usually it's an int so that you can use it as a foreign key without the storage overhead associated with strings.
An index, as ylevington said, is for faster access. It maintains references in a sorted order (using a special data structure; usually a B-tree). It's like how a phone book being sorted by name allows you to quickly look up someone's phone number. If the book was not sorted (analogous to searching for a field with no index) then you would have to go through (on average) half of the entries in the book until you found the one you wanted. An index slows down database writes slightly (because it has to update the index), but speeds up reads a lot.