Conseils sur l'indice composite

J'ai une énorme table (millions de lignes) qui contient les colonnes suivantes:

[When] datetime2(0), [What] tinyint, [Who] bigint 

Il s'agit essentiellement d'un tableau d'events («Quoi») qui est arrivé à diverses entités («Qui») à la fois («Quand»). Il y a environ 10 valeurs différentes pour 'Quoi' – c'est une énumération. Il y a environ 10 000 valeurs pour 'Qui' en ce moment.

Je veux être en mesure d'interroger cette table, de requestr si quelque chose est arrivé à une ou plusieurs entités entre un certain time. Par exemple, [What = 0, 1, 2, 3] est-il arrivé à [Who = 0, 1, 2, 3] entre [When = '2012-10-01' to '2012-11-01'].

Je cherche des conseils sur la meilleure façon d'indexer cette table. Je suis à peu près sûr qu'un index composite est la solution, mais je ne suis pas sûr de la configuration exacte. Par exemple, quel devrait être l'ordre des colonnes? J'ai lu que les colonnes «les plus sélectives» devraient aller vers la gauche, ce qui serait dans ce cas [Quand], [Qui], [Quoi]. Est-ce correct?

Désolé si cette question semble vague, mais je serais reconnaissant pour toute consortingbution. J'utilise SQL Server 2012.

Le mythe de mettre la colonne la plus sélective à gauche est de la merde – désolé.

Votre index composite ne sera utile que si vous utilisez les arguments les plus à gauche, par exemple si vous avez l'index sur

 (when, who, what) 

alors cet index peut répondre à une question à propos de

 (when) 

ou à propos de

 (when, who) 

ou même à propos de

 (when, who, what) 

mais il ne peut pas répondre à des questions sur

 (who, what) 

( puisque la colonne la plus à gauche n'est pas utilisée ici ).

Cela devrait être le point que vous considérez – ordonnez les colonnes de telle sorte que vous puissiez répondre à la plupart de vos questions avec un tel indice composite.