SQL utilise un index à deux colonnes ou deux index simples (x =? Et y>?)

Cette question peut sembler très similaire aux précédentes affichées mais légèrement différente. Lorsque vos requêtes contiennent toujours les deux colonnes, je sais que c'est une bonne pratique de créer un index pour les deux colonnes, mais pour ce scénario, les requêtes seront comme vérifier une colonne puis find tous les loggings supérieurs à une valeur donnée de la deuxième colonne,

SELECT * FROM Data WHERE User_Id = 'Johndoe' AND Last_Query > 1001 

Alors devrais-je toujours utiliser un seul index pour les deux Columns ( User_id , Last_Query dans l'exemple ci-dessus) ou devrais-je faire des index différents pour chaque colonne?

Les index multicolonnes sont conçus pour gérer exactement ce cas. Lorsque la première colonne d'un index a une valeur connue (User_Id = 'Johndoe' dans votre exemple), toutes les lignes avec cette valeur sont classées par la deuxième colonne de l'index (Last_Query dans votre exemple). Ceci permet une search efficace de l'endroit où commence la plage de la deuxième colonne.

En général, cela fonctionne lorsque les préfixes des colonnes d'index ont des filters "=" suivis d'un filter de plage (> ou <) sur la colonne d'index suivante. c'est-à-dire, un index sur (col1, …, colN + 1) et un filter WHERE tel que:

 WHERE col1=a AND col2=b ... AND colN=c AND colN+1 > d