Полнотекстовый поиск только среди доступных товаров
Имеется таблица с товарами:
CREATE TABLE `goods` (
`id` INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(512) NULL DEFAULT NULL,
`model` VARCHAR(256) NULL DEFAULT NULL,
`vendor` VARCHAR(256) NULL DEFAULT NULL,
`enable` BIT(1) NULL DEFAULT b'1',
...
PRIMARY KEY (`id`),
FULLTEXT INDEX `fulltxt` (`name`, `model`, `vendor`)
) ENGINE=InnoDB;
В ней по полям name,model,vendor построен полнотекстовый индекс. (не спрашивайте почему vendor не выведен в отдельную таблицу)).
Поле enable отвечает за доступность товара (1-доступен, 0-не доступен).
Полнотекстовый поиск работает быстро. Но если нужно делать поиск только среди доступных товаров (enable=1), то начинаются проблемы и запрос работает недопустимо долго:
SELECT * FROM `goods` WHERE
enable # это условие тормозит выполнение запроса
AND MATCH(`name`, `model`, `vendor`) AGAINST('такой сякой товар' IN BOOLEAN MODE)
LIMIT 50;
Как можно решить проблему быстродействия?
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Да влоб:
SELECT *
FROM ( SELECT *
FROM goods
WHERE MATCH(`name`, `model`, `vendor`)
AGAINST ('такой сякой товар' IN BOOLEAN MODE)
) x
WHERE enable
-- ORDER BY ??? -- без него LIMIT не имеет смысла
LIMIT 50;