Clustered tables are great, and most of your queries will probably perform best of your tables are configured with clustered indexes. But in some cases you might want to leave the table in its natural state, as a heap, and create only non-clustered index to support your queries.
A heap, as you'll recall, stores data in an unspecified order. Normally, the database engine adds the data in the order the rows are inserted into the table, although the engine likes to move rows around on occasion to store them more efficiently. As a result, you have no way to predict how the data will be ordered.
If the query engine must find data without the benefit of a nonclustered index, it does a full table scan to locate the target rows. On a very small table, this is usually not a big deal, but as a heap grows in size, performance is likely to quickly degrade. A nonclustered index can help by using a pointer that directs the query q u e s t i o n s a n d a n s w e r s
engine to the file, page, and row where the data is stored— normally a far better alternative to a table scan. Even so, it's still hard to beat the benefits of a clustered index when weighing query performance.
Yet heaps can help improve performance in certain situations. Consider the table that has a lot of insert activity, but few updates and deletes, if any. For example, a table that stores log data is likely restricted mostly to insert operations, until perhaps the data is archived. On a heap, you won't see the type of page splits and fragmentation you would with a clustered index (depending on the key columns) because rows are simply added to the end of the heap. Too much page splitting can have a significant effect on performance, and not in a good way. In general, heaps make insert operations relatively painless, and you don't have to contend with the storage or maintenance overhead you find with clustered indexes.
But the lack of updates and deletions should not be the only considerations. The way in which data is retrieved is also an important factor. For example, you should not use a heap if you frequently query ranges of data or the queried data must often be sorted or grouped.
What all this means is that you should consider using a heap only when you're working with ultra-light tables or your DML operations are limited to inserts and your queries are fairly basic (and you're still using non-clustered indexes). Otherwise, stick with a well-designed clustered index. One defined on a simple ascending key, such as the ubiquitous IDENTITY column.