#mysql #оптимизация
Вот у меня запрос:
SELECT * FROM (
SELECT p.id, p.groupid, p.postid, p.date, p.likes, p.reposts, p.text, p.att1_type,
p.att1_data, p.att2_type, p.att2_data, p.att3_type, p.att3_data, p.att4_type, p.att4_data,
p.att5_type, p.att5_data, p.att6_type, p.att6_data, p.att7_type, p.att7_data, p.att8_type,
p.att8_data, p.att9_type, p.att9_data, p.att10_type, att10_data, g.rating
FROM `posts` p
JOIN `verified_posts` vp ON p.`id` = vp.`pid`
JOIN `grouplists` g ON p.`groupid` = g.`groupid`
WHERE g.`usid` = '111'
AND vp.`usid` = '111'
AND g.`hide` = '0'
AND g.`groupid` IN (
SELECT gid FROM gtags WHERE tid IN ('0','13')
)
ORDER BY vp.`vdate` DESC
LIMIT 40
) AS tmp
ORDER BY tmp.`rating` DESC
Я знаю его слабое место: tid равный 13 в части g.groupid IN (SELECT gid FROM gtags
WHERE tid IN ('0','13'))– 75 дополнительных строк и именно тут возникает проблема.
Раньше всё работало, а вот недавно этот запрос стал выдавать в phpMyAdmin "502 Bad
gateway", а php-скрипты вообще выдают 504 ошибку (хотя в настройках php нет ограничения
на выполнение). В терминале запрос работает и выдаёт нужные данные.
Я не понимаю что делать. Может вы сталкивались с подобной проблемой или знаете её
решение?
P.S. Индексы:
Ответы
Ответ 1
Попробуйте такой вариант: SELECT * FROM ( SELECT p.id, -- -- список полей опущен -- g.rating FROM gtags gt JOIN grouplists g ON gt.gid = g.groupid JOIN verified_posts vp ON vp.usid = g.usid JOIN posts p ON p.id = vp.pid WHERE gt.tid IN (0, 13) AND g.usid = 111 AND g.hide = 0 ORDER BY vp.vdate DESC LIMIT 40 ) tmp ORDER BY tmp.rating DESC
Комментариев нет:
Отправить комментарий