2009-08-21 3 views

Répondre

3

La construction d'un index prend plus de temps que de simplement effectuer une analyse de table. Donc, si votre seule requête - que vous exécutez seulement une fois - est juste une analyse de table, l'ajout d'un index sera plus lent. Toutefois, si votre seule requête n'est pas simplement une analyse de table, l'ajout de l'index peut être plus rapide. Par exemple, sans un index, la base de données peut effectuer une jointure autant de balayages de table, une fois pour chaque ligne jointe. Alors l'index serait probablement plus rapide.

Je dirais de le comparer, mais cela semble stupide pour une requête unique que vous ne pourrez exécuter qu'une seule fois.

+0

Étant donné que sans un INDEX, SELECT effectuera une analyse de table, l'utilisation d'un nouvel INDEX sera plus lente à la fois pour enregistrer cet index dans la base de données. – Galaxy

+1

Un balayage de table est généralement O (n); les index sont généralement des arbres, donc construire l'index ne peut pas être plus rapide que O (n) + O (n * log (n)) [n = nombre de lignes]. – derobert

0

Si vous envisagez de définir et d'indexer sur une colonne qui n'a que deux valeurs possibles, cela ne vaut pas la peine car l'index ne donnera que très peu d'améliorations. Les index sont utiles sur une colonne qui a un degré élevé d'unicité et sont fréquemment interrogés pour une certaine valeur ou plage. D'un autre côté, les index durs rendent l'insertion et la mise à jour plus lente. Dans ce cas, vous devez l'ignorer.

+1

Un index peut valoir la peine pour une colonne avec seulement deux valeurs. Par exemple, vous avez peut-être une table avec un grand nombre de lignes, et un drapeau booléen "cela a-t-il besoin de traitement?". En supposant que la plupart des choses n'ont pas besoin d'être traitées, un index accélérera probablement la requête "trouver des choses à traiter". Généralement, les index fonctionnent bien en trouvant des valeurs rares, indépendamment de la cardinalité globale de l'ensemble. (Une cardinalité très élevée est un cas spécial où * toutes les * valeurs sont rares) – derobert

+0

Donc si je veux CHOISIR une col. de 2 possibilités pour plusieurs fois (environ 100 k), devrais-je construire un INDEX? – Galaxy

+1

... et rare est défini comme inférieur à 1-10%, en fonction d'un grand nombre de facteurs, tels que l'accès aléatoire coûteux à la table par rapport à l'accès séquentiel. – derobert

Questions connexes