De la performance en BDD : indexer correctement

Cette présentation s'est faite dans le cadre de la veille techno mise en place chez Axopen. Elle a pour objectif de rappeler aux développeurs les différentes méthodes pour indexer des données. Dans Postgres, il existe trois grandes familles d'indexs, qui ont tous des fonctionnements et des spécificités.

Bien savoir les choisir, c'est savoir derrière les optimiser, et c'est savoir comment les exploiter.

Les Slides

Un résumé rapide

Dans une table dans une base de données relationelle, les tuples sont insérés la plupart du temps sans ordre particulier.

Ainsi, quand on veut chercher un tuple précis (ou un ensemble de tuples qui valident une condition), on est obligé de parcourir toute la table jusqu'à le trouver.

Pour accélérer ça, il est possible de mettre en place un index : on utilise une structure de données optimisée pour chercher une valeur.

Pour parler crûment, on cherche à battre la complexité .

La complexité

Le rappel ne fait jamais de mal à personne, on définit des "classes" de complexité. On en a trois (avec une fonction):

  • , qui veut dire que ce qu'on étudie est plus petit ou équivalent (borné par le haut) à (qui en informatique sera souvent , n ou )
  • , qui signifie l'inverse, que la fonction borne par le dessous ce qu'on étudie
  • , le combo des deux, qui signifie que l'on borne par le dessus et par le dessous l'objet de notre étude par

Pour battre cette complexité, on a deux grands types de structures de données à notre disposition:

  • les tables de hachage
  • les arbres

Les tables de hachage

Pour les tables de hachage, l'idée derrière est simple : on a un grand tableau, et une fonction qui tourne en qui nous détermine la position d'un objet dans le tableau. Pour retrouver un objet dans le tableau, on a juste à connaître sa position, et on fait ça en , on bat donc à plates coutures la complexité en .

Le seul problème des tables de hachage, c'est qu'il n'y a aucune propriété d'ordre dans la façon dont les données sont rangées à l'intérieur. Ainsi, pour chercher un tuple précis, c'est très efficace. Pour chercher tous les tuples plus grands qu'une certaine valeur, ça sera impossible.

Les arbres

L'idée derrière un arbre, c'est que chaque niveau nous permets de trier des valeurs. Ainsi, pour chercher un