Here's an overview of each of the publishing methods:
This publish will simply fully publish out each item again, regardless of whether it has been published before or not. Therefore this is the slowest publish as Sitecore will still transfer over changes that may already be on the target database.
With this method, Sitecore will look at each item and compare it to the item in the target database (if it exists). If it determines that it needs to be updated, then it publishes the item, otherwise it skips it. I'm not actually sure what method it uses to determine if it needs to be updated, but my guess would be that it uses the
Revision field which is a GUID that is updated each time an item is updated. If the GUIDs match, it would know that it doesn't need to update the item. Of course, if the item isn't there at all, it will be published.
Every time an update is made to an item, Sitecore tracks this change inside the
PublishQueue table in the database. This is effectively Sitecore recording the fact that this item has changed, and therefore will need to be published. When you do an Incremental publish, this table is simply read to get the list of items that need to be published out. After the publish, this table is cleared.
Incremental is the fastest method of publishing as Sitecore is only publishing out what has changed. However it is also prone to error, for example if the
PublishQueue table has been cleared before those items have been published, then an incremental publish won't publish those items.