Полнотекстовый поиск только среди доступных товаров

Имеется таблица с товарами:

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;
→ Ссылка