Я просто создаю таблицу для хранения иерархических данных с использованием измененного предварительного трейрования дерева заказов (MPTT) - вы знаете одно: каждый узел хранит идентификаторы left
и right
, чтобы найти своих потомков , Я использую предложенную модель CakePHP, которая варьируется от стандартного способа, включая parent_id
с каждой строкой.Предлагаемые индексы для таблицы MPTT
Вот предлагаемая структура таблицы:
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)
);
Имея никогда не использовал этот стиль раньше, и не зная, как именно он получает обыскали, я задаюсь вопросом, какие поля я должен быть индексирование? Является ли только основной ключ достаточным, или я должен включать lft
и rght
тоже?
Это. Большинство деревьев читаются намного больше, чем они написаны, поэтому наличие индекса с двумя столбцами (не двух отдельных индексов) слева и справа отлично. Кроме того, если вы храните несколько деревьев в одной таблице, например. группируя пользователя, сделайте его индексом с тремя столбцами на grouping_id, слева, справа. – Walf