MySQL комплексные индексы - PullRequest
1 голос
/ 23 марта 2012


Я хотел бы задать 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

1 Ответ

3 голосов
/ 23 марта 2012

Вопрос 1:

Нет, см. Другой вопрос по этому поводу: Почему MySQL не имеет хеш-индексов на MyISAM или InnoDB?


Вопрос 2:

Да и нет. Нет , вы не можете в (основной) MySQL, но да , вы можете на MariaDB (вилка или MySQL). Читайте о: Виртуальные столбцы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...