Я хотел бы задать 2 вопроса об индексах в MySQL:
1. возможно ли иметь индекс типа HASH в движке MyISAM ?
2. возможно ли создать индекс по вычисленному значению, например,
CREATE INDEX AD_MAIN_CATEGORY ON ad ((category_id % 100) ASC) USING BTREE;
У меня есть запрос, который выбирает все категории и подсчитывает количество объявлений в основной / подкатегории. Каждое объявление имеет только subcategory_id, из которого можно рассчитать main_category_id (subcategory_id = 120 => main_category_id = 100). Злой (медленный) запрос:
SELECT `c`.*, (SELECT COUNT(*) FROM ad WHERE IF(c.parent_id = 0,(ad.category_id DIV 100) * 100 = c.id,ad.category_id=c.id)) AS `count`, `ct`.`label` FROM `category` AS `c` INNER JOIN `category_translation` AS `ct` ON c.id = ct.category_id WHERE (ct.language_id = 1) ORDER BY `c`.`id` ASC