Bonjour,
Ces index sont ils identiques:
(champA ; champB)
et
(champB ; champA)
Si je fait un select avec une condition juste sur le champA, seul le premier index pourra être utilisé ?
Bonjour,
Ces index sont ils identiques:
(champA ; champB)
et
(champB ; champA)
Si je fait un select avec une condition juste sur le champA, seul le premier index pourra être utilisé ?
Oui, car un index vectorise l'information.
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
On est bien d'accord que l'index
(champB ; champA)
ne pourra jamais être exploité sur une requête du type:
select * from tableA where champA='...';
?
Ce n'est pas si simple....
http://sqlpro.developpez.com/cours/quoi-indexer/#LVII
En effet si votre index est couvrant et malgré le fait qu'il ne permette pas la recherche directe il y a fort à parier qu'il soit moins couteux de lire cet index par balayage que de lire toute la table par balayage...
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Ok merci pour l'info.
ça ne marche que pour les index couvrants ?
Quand vous dites cependant, "il y a fort a parier", je fait comment pour savoir ce qui est mieux ?
Je laisse sql server se débrouiller pour choisir ?
Faut il faire un "hint" pour forcer le choix de l'index ?
Existe t il une commande équivalent au explain de mysql pour sql server ?
D'avance merci pour vos réponses
Un index est couvrant par rapport à une requête. Il peut être couvrant pour une et pas pour l'autre.ça ne marche que pour les index couvrants ?
En fonction de votre requête cela se mesure au nombre de pages manipulées. Par exemple à l'aide de SET STATISTICS IO ON vous saurez dans SSMS quelle est la consommation de pages avec tel ou tel index pour telle ou telle requête.Quand vous dites cependant, "il y a fort a parier", je fait comment pour savoir ce qui est mieux ?
Oh que oui !Je laisse sql server se débrouiller pour choisir ?
C'est généralement la chose la plus stupide !Faut il faire un "hint" pour forcer le choix de l'index ?
Une petite dizaine... Des commandes dans l'IHM SSMS :Existe t il une commande équivalent au explain de mysql pour sql server ?
CTRL + L : affichage graphique du plan estimé
CTRL + M : affichage graphique du plan réalisé (qui peut être différent du plan estimé)
MAJ + ALT + S : statistiques du client
...
Des commandes T_SQL
SET SHOWPLAN_TEXT ON / OFF
SET SHOWPLAN_XML ON / OFF
SET SHOWPLAN_ALL ON / OFF
SET STATISTICS IO ON / OFF
SET STATISTICS TIME ON / OFF
SET STATISTICS PROFILE ON / OFF
SET STATISTICS XML ON / OFF
...
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Partager