#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
Комментариев нет:
Отправить комментарий