a clustered index defines your physical table structure (to a certain extent) - for example. it determines in what order the data is ordered. Think of a phone book that is "grouped" by (LastName, FirstName) - at least in most countries.
You get only one clustered index per table - so choose it wisely! According to the Queen of Indexing Gospel , Kimberly Tripp , the clustering key should be narrow, stable (never changing), unique (yes!), And ideally everything grows.
It should be narrow, as the clustering key will be added to each record of each nonclustered index. After all, the clustering key is the value used to finally find the actual data.
It must be stable, because constantly updating a plurality of index values ββis a costly undertaking β all the more so since the clustering key must be updated in all nonclustered indexes.
It must be unique, because again - this is ultimately the value used to determine the evidence. If you select a column that is not unique, SQL Server will "identify" your clustering key by adding a 4-byte value to it - not very good.
And ideally, the clustering key should constantly increase, since this leads to the least fragmentation of the page and index and, therefore, is best suited for performance.
The ideal candidate for the clustering key would be the INT ID (or BIGINT) - it ideally fulfills all these requirements.
As for non-clustered indexes - use and choose them wisely! There is only one general rule that I can give you: all columns that are part of a foreign key (referring to another table) must be in the index - SQL Server will not (contrary to popular belief and many myths) put such an index in its place automatically - never was, never does.
Other than that - you need to look at your system, see what queries you have - all the columns that appear in the WHERE or SORT clause are potential candidates for indexing, but too many indexes are not very good either ....