Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1616 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Petite information à propos des index

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petite information à propos des index

n°1153427
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-07-2005 à 11:04:44  profilanswer
 

D'un point de vue purement logique, si j'ai un index ixA : (a) et un index ixB (a, b, c), en prenant en compte que la colonne "a" est la seule de l'index ixA et est la première de l'index ixB, je pense que l'index ixA est inutile.
 
En effet, si j'ai une requête dont la clause WHERE ne porte que sur "a", à priori, que j'utilise le premier noeud de ixB ou l'index ixA me semble totalement équivalent.
 
Seulement, je n'ai jamais pu le lire noir sur blanc dans une documentation, et les optitimisations liées aux index sont trop "aléatoires" pour pouvoir être mesurées avec précision sur une base de test (les index ne sont pas actifs immédiatement, une fois que le plan est connu et les résultats en cache, le vitesse ne dépend plus de la structure de la base, etc.)
 
Alors... Est-ce que quelqu'un pourrait confirmer ce point ?
 
En effet, j'ai, dans une base SQL Server, environ 20 index. C'est une table qui comporte plusieurs millions de lignes, et il est dont indispensable que les index soient les plus performants possibles.
 
Cependant, on fait des requêtes dans cette base de données via des bases Access, qui passent par des tables liées. Hors, pour une raison inconnue, si on a trop d'index, ça ne fonctionne pas !
 
Vu que certains index tels que ixA et ixB semblent faire doublon, je compte les fusionner, afin de créer de nouveaux index qui sont nécessaires à de nouveaux développements.
 
Merci d'éclairer ma lanterne !

mood
Publicité
Posté le 19-07-2005 à 11:04:44  profilanswer
 

n°1153451
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-07-2005 à 11:17:15  profilanswer
 

Ah ben voilà !
 

Code :
  1. Un index peut être créé dans une table, soit sur une seule colonne, soit sur un ensemble de colonnes et il est implémenté sous la forme d'un B-tree. Il comprend les entrées d'une ou de plusieurs colonnes (clé de recherche) de chaque ligne de la table. Un B-tree est ordonné d'après la clé de recherche et une recherche efficace peut y être effectuée sur la base d'un sous-ensemble quelconque de la clé de recherche. Par exemple, un index créé sur les colonnes A, B, C peut faire l'objet d'une recherche efficace sur A, sur A, B et sur A, B, C.


(Issu de la doc officiel de SQL Server 2000)
 
Donc mon ixA peut être supprimé, il n'apporte rien (ou presque) par rapport à ixB !
 
Chouette ! Ca fait déjà 4 index de moins dans la table ! :bounce:


Message édité par Arjuna le 19-07-2005 à 11:17:43
n°1153521
Beegee
Posté le 19-07-2005 à 11:57:40  profilanswer
 

et pourquoi tu fais pas un petit test de perfs ?
 
Ca m'étonnerait pas que l'index sur A seul soit un poil plus rapide, juste à cause de la taille de l'index à gérer qui est plus petite :) mais ça doit pas se jouer à grand chose.

n°1153532
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-07-2005 à 12:04:32  profilanswer
 

Ben parceque comme je l'ai dit, y'a un truc qui coince avec les index :
-> Fait une requête maxi complète qui tape sur des millions de lignes. A la première execution, ça dure 20 minutes. A la seconde execution, si tu la fait dans la foulée, il a encore tout en cache (plan d'éxécution et données) et pof, ça dure 20 millisecondes.
 
Idem, tu crées un index, tu refais une requête lente, qui devrait taper dedans. Ca ramme toujours autant.
Tu fais un update statistics, ça change rien.
Le lendemain, ta requête est instantannée.
 
Le souci des index, c'est que ça se fait en tâche de fond. Du coup, un même bench peut donner des résultats très différents à différents moment, même sans mise à jours de la structure de la table (un grand nombre de modifications dans la base peuvent suffir à pourrir un index pendant plusieurs heures)

n°1153537
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-07-2005 à 12:05:49  profilanswer
 

Sinon, c'est sûr que ixA est très certainement un peu plus rapide. Mais ce qui m'importe, c'est que ixB soit tout de même efficace. En effet, les autre index à ajouter sont carrément vitaux pour le fonctionnement de la nouvelle appli (avec ou sans, ça passe de 20 minutes à 13 secondes, donc si les autres requêtes passent de 2 à 3 secondes, y'a moindre mal, d'autant plus que la mise en prod de la nouvelle appli s'accompagne de la mise en place d'une batterie de nouveaux serveurs, donc on devrait rien perdre en perfs, même si les index sont un peu moins bons ;))


Message édité par Arjuna le 19-07-2005 à 12:07:21
n°1153556
mrbebert
Posté le 19-07-2005 à 12:13:52  profilanswer
 

Je pense pas qu'il y ait une diminution notable des performances en utilisant la première colonne d'un index plutôt qu'un index indépendant.
Et puis tu devrais y gagner un petit peu lors des insertions :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Petite information à propos des index

 

Sujets relatifs
Index ServerERREUR Notice: Undefined index: matiere in c:\
SQL Server 2000 : Stats sur l'utilisation des index ?Création d'index
[mysql] une clé primaire est elle par défaut un index ?Undefined index mais pas de get ni de post!
Petite question pour utiliser l'hébergement free.fr?Information systeme en java
question a propos d'un logiciel macromédiaPetite question sur des formulaires
Plus de sujets relatifs à : Petite information à propos des index


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR