Qu'est-ce qu'une table d'index MySQL?
-
20-08-2019 - |
Question
Je dois accélérer une requête. Est-ce qu'une table d'index est ce que je cherche? Si oui, comment en faire un? Dois-je le mettre à jour à chaque insertion?
Voici les schémas de table:
--table1-- | --tableA-- | --table2--
id | id | id
attrib1 | t1id | attrib1
attrib2 | t2id | attrib2
| attrib1 |
Et la requête:
SELECT
table1.attrib1,
table1.attrib2,
tableA.attrib1
FROM
table1,
tableA
WHERE
table1.id = tableA.t1id
AND (tableA.t2id = x or ... or tableA.t2id = z)
GROUP BY
table1.id
La solution
Vous devez créer un index composite sur tableA
:
CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id)
Les index dans MySQL
sont considérés comme faisant partie d'un tableau: ils sont automatiquement mis à jour et utilisés automatiquement chaque fois que l'optimiseur décide que c'est un bon choix de les utiliser.
MySQL
n'utilise pas le terme table d'index
.
Ce terme est utilisé par Oracle
pour désigner ce que d'autres bases de données appellent CLUSTERED INDEX
: une sorte de table dans laquelle les enregistrements eux-mêmes sont organisés en fonction de la valeur d'une colonne. (ou un ensemble de colonnes).
Dans MySQL
:
-
Lorsque vous utilisez le stockage
MyISAM
, un index est créé en tant que fichier séparé portant l'extension.MYI
.Le contenu de ce fichier représente un
B-Tree
, chaque feuille contenant la clé d'index et un pointeur vers le décalage dans le fichier.MYD
contenant les données.La taille du pointeur est déterminée par le paramètre du serveur appelé
myisam_data_pointer_size
, qui peut varier de2
à7
octets et par défaut à6
depuisMySQL 5.0.6
.Ceci permet de créer des tables
MyISAM
jusqu'à2 ^ (8 * 6) octets
=256 To
-
Dans
InnoDB
, toutes les tables sont classées de manière inhérente par laPRIMARY KEY
, elle ne prend pas en charge les tables organisées par tas.Chaque index, par conséquent, n’est en réalité qu’une simple table
InnoDB
consistant en un seulPRIMARY KEY
deN + M
enregistrements: < code> N enregistrements étant une valeur indexée etM
enregistrements étant unPRIMARY KEY
de l'enregistrement de la table principale contenant les données indexées.