Meilleure pratique d'index sur une table contenant une grande quantité de données

Ma question est, si j'ai besoin d'un index clusterisé ou non-cluster. C'est mon cas:

J'ai une table avec appr. 100.000.000 loggings. Le dessin est le suivant: tblLarge: Col1 varchar (30) non null Col2 varchar (12) non null col3 Varchar (30) non null insertTime datatime

Je ne fais que des inserts (beaucoup d'inserts, environ 15.000.000 par jour). Ne met jamais à jour ou supprime (je tronque la table de time en time)

La seule sélection est: select Col1 à partir de tblLarge où Col2 = 'certaines données' commandées par insertTime desc – cette sélection est effectuée en permanence.

Col2 n'est pas unique, mais jamais nul.

Questions: 1) Quel genre d'indice (s) serait le meilleur à appliquer à la table dans ma situation? De cause j'ai besoin d'un index sur Col2. Devrait-il être groupé ou non groupé? (Quelqu'un m'a dit une fois, que les tables devraient toujours avoir un index en CLUSTERED, mais je ne suis pas sûr que ce soit correct)

2) L'indice NOLOCK est-il bon ou mauvais? (Cela ne me dérange pas si la sélection lit datatables non-validées) select Col1 de tblLarge (NOLOCK) où Col2 = 'certaines données' ordonnées par insertTime desc

Merci d'avance

Il n'y a pas de colonne d'identité, donc un index en cluster nécessiterait trop d'activité de disque lors de l'insertion des nouveaux loggings. Vous avez besoin d'un index non cluster sur col2 pour inclure le champ que vous souhaitez renvoyer, col1:

CREATE NONCLUSTERED INDEX [IX_tblLarge_col2] ON [dbo].[tblLarge] ( [col2] ASC ) INCLUDE ( [col1]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]