@Hfnas

Правильно ли я создала индексы?

CREATE TABLE category (
    id integer not null primary key,
    parent_category_id integer references category(id),
    name varchar(100) not null
);


1. На выборку всех категорий верхнего уровня, начинающихся на “авто”
SELECT * FROM db_test.category where name like "авто%";
CREATE FULLTEXT INDEX `name` on db_test.category(name)

2. На выборку всех категорий, имеющих не более трёх подкатегорий следующего уровня (без глубины)
select * from db_test.category t1 where t1.parent_category_id in 
(select parent_category_id from db_test.category t1
group by parent_category_id having count(*)<4)

3. На выборку всех категорий нижнего уровня (т.е. не имеющих детей)
SELECT * FROM db_test.category t
left join db_test.category t2 on t2.parent_category_id=t.id
where t2.id is null
CREATE INDEX `idx_category_parent_category_id`  ON `db_test`.`category` (parent_category_id)


Но после создания индексов почему-то время исполнения запроса увеличивается...
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 2
Gomonov
@Gomonov
Это не совсем правильный подход для иерархии. Для такой задачи лучше подходит шаблон closure table
вот достаточное описание
Ответ написан
Комментировать
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
Спросите не у нас, а у команды EXPLAIN
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы