Je ne fais que construire une table pour stocker des données hiérarchiques en utilisant le MPTT (Modified Pre-Order Tree Traversal) - vous connaissez celui-ci: chaque nœud stocke les ID left
et right
pour trouver ses descendants . J'utilise un modèle suggéré par CakePHP, qui varie de la manière standard en incluant le parent_id
avec chaque ligne.Indices suggérés pour une table MPTT
est ici la structure de table suggérée:
CREATE TABLE categories (
id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
parent_id INTEGER(10) DEFAULT NULL,
lft INTEGER(10) DEFAULT NULL,
rght INTEGER(10) DEFAULT NULL,
name VARCHAR(255) DEFAULT '',
PRIMARY KEY (id)
);
ayant jamais utilisé ce style avant, et ne sachant pas exactement comment il se recherche, je me demande quels domaines je devrais être indexation? Est-ce que la clé primaire suffit, ou devrais-je inclure lft
et rght
aussi?
Ce. La plupart des arbres sont lus beaucoup plus qu'ils ne sont écrits, donc avoir un index à deux colonnes (pas deux index séparés) à gauche et à droite est génial. En outre, si vous stockez plusieurs arbres dans la même table, par ex. regrouper par utilisateur, en faire un index à trois colonnes sur grouping_id, left, right. – Walf