Je lisais ce use-the-index-luke.com qui explique en détail comment fonctionnent les index. L'une des choses que cette personne a réitérées est que l'ordre des index est très important et pour accélérer la requête, les colonnes de la clause where doivent être les mêmes que celles de l'index. Aujourd'hui, je viens de corroborer cette théorie et j'ai créé une table (id int, nom nvarchar (100)) sur SQL Server 2008. J'y ai inséré quelque 5000 lignes et créé un index
create index abc on test (name, id )
et a tiré la requête
select ID, name
from test
where ID = 10
and name = '10'
Je m'attendais à ce qu'une analyse complète de la table soit suivie d'une sélection dans le plan de requête, mais à ma grande surprise, la sortie du plan était une analyse d'index suivie par la sélection.
Donc, ma question est: l'ordre des colonnes dans la clause Where est-il important ou SQL Server les réorganise-t-il conformément à la définition d'index?
Merci !!
la source
Réponses:
Non. L'ordre des colonnes dans la
WHERE
clause n'a pas d'importance du tout.la source
Tout d'abord, l'
DROP
instruction dans la fenêtre de requête n'a clairement pas été exécutée, mais pour des raisons d'explication, je vais essayer de répondre à ce que vous avez demandé.Pensez aux index comme vous le feriez pour un annuaire: les entrées sont triées par nom, puis par prénom. (Il s'agit de l' ordre des clés d' index .)
Si je vous demande de trouver tous les numéros de téléphone des personnes portant le nom de famille "Davis", vous tournerez la page appropriée et lirez les numéros. (Il s'agit d'une recherche d' index .)
Si je vous demande de trouver tous les numéros de téléphone des personnes portant le prénom «Janice», vous devrez consulter chaque page pour les trouver toutes. (Il s'agit d'un balayage d' index .)
Si je vous donne à la fois un prénom et un nom de famille, vous pourrez trouver cette entrée très rapidement, tout comme le premier exemple, car il est évident que vous utiliseriez le nom de famille pour trouver la bonne page, puis le prénom pour trouver l'entrée exacte. Peu importe l'ordre dans lequel je vous ai donné les informations, tant que je vous ai donné à la fois un prénom et un nom de famille.
L'optimiseur de requêtes SQL Server fonctionne de la même manière. En fonction de l'ordre des clés d'index, il détermine automatiquement le moyen le plus efficace pour récupérer les données que vous avez demandées, quel que soit l'ordre des conditions dans la
WHERE
clause.la source
L'ordre des colonnes sur la matière d'index mais pas dans l'ordre des valeurs andées sur la
where
clause.la source