Indexes in MS SQL Server allow for optimized data retrieval from tables. There are two main types of indexes - clustered and non-clustered. A clustered index physically orders the data based on the index keys. A non-clustered index logically orders the data and stores pointers to the physical data. The example shows how indexes can reduce the logical reads needed to retrieve data from 200,000 records in a table based on different query criteria. Fragmentation can occur internally within pages or externally across extents if data is stored non-contiguously on disk.