Как оптимизировать запрос с ORDER BY и FULLTEXT search?

Имеется таблица на 12 млн. строк.
CREATE TABLE `shingles` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `shingle` text NOT NULL,
 `count` int(11) NOT NULL,
 `used` tinyint(1) DEFAULT NULL,
 `stop` tinyint(1) DEFAULT NULL,
 `date` tinyint(1) DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `shingle` (`shingle`(255)) USING BTREE,
 KEY `count` (`id`),
 FULLTEXT KEY `shingle_fulltext` (`shingle`)
) ENGINE=InnoDB AUTO_INCREMENT=11707635 DEFAULT CHARSET=utf


Следующий запрос выполняется в районе 20с.
select `t1`.* from 
(select * from `shingles` 
where MATCH (shingle) AGAINST ('слово' IN BOOLEAN MODE)) as t2 
inner join `shingles` as `t1` on `t1`.`id` = `t2`.`id`
 order by `t1`.`count` desc limit 5


Чем больше результатов в полнотекстовом поиске, тем медленнее...
Как можно оптимизировать? Без "order by" все летает.
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 2
@LaRN
Senior Developer
Можно попробовать без подзапроса, так не будет вложенного цикла по большой таблице:
SELECT t1.*, MATCH (t1.shingle) AGAINST ('слово' IN BOOLEAN MODE) AS ind
FROM shingles as t1
ORDER BY t1.ind DESC, t1.count DESC
LIMIT 5
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT * 
  FROM `shingles` 
  WHERE MATCH (`shingle`) AGAINST ('слово' IN BOOLEAN MODE)
  ORDER BY `count` DESC
  LIMIT 5
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Badoo Development Москва
от 140 000 до 180 000 руб.
Badoo Development Москва
от 180 000 до 250 000 руб.
Делис Инфо Москва
от 70 000 до 80 000 руб.
19 авг. 2018, в 18:43
2000 руб./за проект
19 авг. 2018, в 17:11
200000 руб./за проект
19 авг. 2018, в 12:12
40000 руб./в месяц