Вот ваш первый запрос
SELECT SQL_NO_CACHE perma,title,body,
MATCH(title) AGAINST('flowers for children' IN BOOLEAN MODE) AS sort
FROM articles
WHERE MATCH(title) AGAINST('flowers for children' IN BOOLEAN MODE)
ORDER BY sort DESC LIMIT 30;
Возможно, вам понадобится рефакторинг этого
Сначала выберите ключи и значение сортировки
SELECT id,MATCH(title) AGAINST ('flowers for children' IN BOOLEAN MODE) sort
FROM articles
WHERE MATCH(title) AGAINST ('flowers for children' IN BOOLEAN MODE);
Этот запросВ результате получится временная таблица 800M
Далее, ограничьте ее 30 самыми высокими значениями сортировки
SELECT * FROM
(
SELECT id,MATCH(title) AGAINST ('flowers for children' IN BOOLEAN MODE) sort
FROM articles
WHERE MATCH(title) AGAINST ('flowers for children' IN BOOLEAN MODE)
) AA
ORDER BY sort DESC LIMIT 30;
Хорошо, теперь временная таблица 720 байт
Наконец, LEFT JOIN
те30 строк в таблице articles
SELECT
B.perma,B.title,B.body,A.sort
FROM
(
SELECT * FROM
(
SELECT id,MATCH(title) AGAINST ('flowers for children' IN BOOLEAN MODE) sort
FROM articles
WHERE MATCH(title) AGAINST ('flowers for children' IN BOOLEAN MODE)
) AA
ORDER BY sort DESC LIMIT 30
) A LEFT JOIN articles B USING (id);
Попробуйте !!!