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)
Но после создания индексов почему-то время исполнения запроса увеличивается...