Bonjour/Bonsoir tout le monde
J'arrive pas à saisir l'utilité des index, je veux dire dans quel cas on les utilise?
et s'il y a un exemple ça sera super
Merci d'avance pour vos réponses
Bonjour/Bonsoir tout le monde
J'arrive pas à saisir l'utilité des index, je veux dire dans quel cas on les utilise?
et s'il y a un exemple ça sera super
Merci d'avance pour vos réponses
Il n'est jamais trop tard pour apprendre
Plusieurs posts de SQLPro en parlent, par exemple cette 1ere lecture. Sinon, il y a tout plein d'articles intéressants disponibles via .
En faisant une métaphore :
lorsque tu cherches un mot dans, une citation dans un livre, préfère-tu relire le livre depuis le début, ou allez regarder à la fin du livre l'index qui permet de le retrouver du premier coup ?
Merci d'ajouter un sur les tags qui vous ont aidé
en fait je comprends tout ça
mais ils me paraissent inutiles puisqu'il y a la commande select qui peut le faire avec plus de précision et plus rapidement
en plus, les index se mettent à jour à chaque fois qu'on ajoute ou modifie quelque chose dans la table, et par conséquent ils ralentissent la mémoire
Il n'est jamais trop tard pour apprendre
Certainement pas, SELECT utilise ou non les index, mais pour cela il faut qu'ils soient présents ! et c'est leur utilisation qui fait que le SELECT est rapide, ou non.
oui, mais on peut les désactiver le temps de l’opération, mais s'ils ne sont pas réactivés, les conséquences seront sur le SELECT ...
Merci d'ajouter un sur les tags qui vous ont aidé
ok je comprends (plus au moins )
merci pour vos réponses
Il n'est jamais trop tard pour apprendre
En fait, ce que tu n'as pas saisi (au début du topic en tout cas), c'est que les index, tu les utilises implicitement.
Si tu as une table sur la table "personne (id, nom, prenom, age)" et deux index : idx1(id) et idx2(nom, prenom)
Voici quelques scénario :
=> Le SGBD va lire automatiquement l'index idx1, et ainsi retrouver très rapidement la ligne correspondant à l'id 586.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from personne where id = 586;
=> Le SGBD va lire automatiquement l'index idx2, et ainsi retrouver très rapidement les lignes correspondant aux personnes appenées ainsi
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from personne where nom = 'Dupont' and prenom = 'Lucien';
=> Le SGBD va lire l'ensemble de la table pour trouver celles dont l'age est le bon.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from personne where age = 35;
=> Le SGBD va lire l'ensemble de l'index idx2 (car il est trié comme l'ordre de tri, ce qui évite de faire un tri sur le résultat), et filtrer les lignes "manuellement", quand elles ont le bon age.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from personne where age = 35 order by nom;
L'utilisation des index est implicite, et c'est le SGBD qui choisi pour toi.
On arrive donc face à ce genre de situations :
=> Qui prendre ? idx1 ou idx2 ? Ca dépend des statistiques des index, donc de tes données. Si tu as 10000 Lucien Dupont dans ta table, alors idx1 sera utilisé (puisqu'au plus, le SGBD va lire 1000 lignes pour filtrer les id ensuite). En revanche, si tu en a 2, c'est idx2 qui sera lu, puisque tu liras au plus 2 lignes, puis filtrer les noms et prénoms ensuite.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from personne where nom = 'Dupont' and prenom = 'Lucien' and id between 1000 and 2000;
On se rend compte que non seulement c'est implicite, et à la discrétion du SGBD, mais qu'en plus le choix des index dépend à la fois des valeurs des données contenues dans la table, et des valeurs contenues dans les filtres de ta requête.
Et là, on se rend compte de la grande puissance de la chose : au lieu d'appliquer toujours la même règle immuable qui est bonne pour 80% des cas et catastrophique pour les 20% restants, le SGBD va toujours choisir la meilleure solution.
On ne jouit bien que de ce qu’on partage.
Merci beaucoup StringBuilder pour vos explications
c'était le mot clé "implicitement" qui me fallait pour comprendre
Maintenant tout est devenu clair
Merci encore
Il n'est jamais trop tard pour apprendre
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager