основная разница которую вижу - заменить на EXISTS
почему бы не попробовать, да
на какой базе пробовать? в личку базу не скинули еще
Тяжёлые запросы
Re: Тяжёлые запросы
Don't forget to run script update
Re: Тяжёлые запросы
зашел на сервак и есть вопросы к этим изменениям
точнее обнаружилось интересный ньюанс, который описан в нете и который делает не таким обнозначным это изменение
да, если взять таг по котрому 70к галер то
и вариант с exists
то exists выигрывает
но если взять таг с небольшим кол-во галер например
VS
то вариант без exits выполняется за 0.001 а вариант exists - 22 секунды
по тестам запрос без exists выиграывает на всех тагах кромее тех которых в базе больше 70к
их ИД
4755
12945
15184
что наталкиевет на мысль что это какое-то ограничение в мускле.
Что делать:
1. попробовать запросы в шеле что б повторить результаты и подтвердить ( или опровергнуть) этот тест
2. если с тестом все ок то либо искать что в мускле ограничивает либо удалить из базы эти 3 монстротага
точнее обнаружилось интересный ньюанс, который описан в нете и который делает не таким обнозначным это изменение
да, если взять таг по котрому 70к галер то
Code: Select all
SELECT SQL_CALC_FOUND_ROWS gs.gallery_id, gs.thumb_id, gi.sponsor_id, gi.content_count, gi.content_type, gs.total_shows, gs.total_clicks, gs.total_ctr, gt.thumb_url, gd.*, gi.content_count, gi.crop_profile_id, gs.activation_date, gi.added_date, gi.duration, gi.url, gi.gallery_total_shows, gi.sponsor_id, gi.source_url, gi.custom_gallery FROM rot_gallery_stats1 as gs
JOIN rot_gallery_info as gi on gi.gallery_id = gs.gallery_id
JOIN rot_gallery_data16 as gd on gd.gallery_id = gs.gallery_id
JOIN rot_gal2tag on rot_gal2tag.gallery_id = gs.gallery_id
JOIN rot_thumbs as gt on gt.thumb_id = gs.thumb_id
WHERE 1 = 1 AND gi.gallery_status = 'active' AND gi.gallery_type = 0 and gs.best_thumb = 'yes'
and gi.sponsor_id NOT IN ('3') and gs.group_id = 0
AND gs.gallery_id IN (SELECT gallery_id FROM rot_gal2tag WHERE tag_id IN ('34386') )
group by gs.gallery_id, gs.thumb_id ORDER BY tested_thumb DESC, gs.total_ctr DESC LIMIT 0, 120;и вариант с exists
Code: Select all
SELECT SQL_CALC_FOUND_ROWS gs.gallery_id, gs.thumb_id, gi.sponsor_id, gi.content_count, gi.content_type, gs.total_shows, gs.total_clicks, gs.total_ctr, gt.thumb_url, gd.*, gi.content_count, gi.crop_profile_id, gs.activation_date, gi.added_date, gi.duration, gi.url, gi.gallery_total_shows, gi.sponsor_id, gi.source_url, gi.custom_gallery FROM rot_gallery_stats1 as gs
JOIN rot_gallery_info as gi on gi.gallery_id = gs.gallery_id
JOIN rot_gallery_data16 as gd on gd.gallery_id = gs.gallery_id
JOIN rot_gal2tag on rot_gal2tag.gallery_id = gs.gallery_id
JOIN rot_thumbs as gt on gt.thumb_id = gs.thumb_id
WHERE 1 = 1 AND gi.gallery_status = 'active' AND gi.gallery_type = 0 and gs.best_thumb = 'yes'
and gi.sponsor_id NOT IN ('3') and gs.group_id = 0
AND EXISTS (SELECT 1 FROM rot_gal2tag WHERE ( rot_gal2tag.tag_id IN ( 4755 ) ) AND ( gs.gallery_id = rot_gal2tag.gallery_id ))
group by gs.gallery_id, gs.thumb_id ORDER BY tested_thumb DESC, gs.total_ctr DESC LIMIT 0, 120;то exists выигрывает
но если взять таг с небольшим кол-во галер например
Code: Select all
SELECT SQL_CALC_FOUND_ROWS gs.gallery_id, gs.thumb_id, gi.sponsor_id, gi.content_count, gi.content_type, gs.total_shows, gs.total_clicks, gs.total_ctr, gt.thumb_url, gd.*, gi.content_count, gi.crop_profile_id, gs.activation_date, gi.added_date, gi.duration, gi.url, gi.gallery_total_shows, gi.sponsor_id, gi.source_url, gi.custom_gallery FROM rot_gallery_stats1 as gs
JOIN rot_gallery_info as gi on gi.gallery_id = gs.gallery_id
JOIN rot_gallery_data1 as gd on gd.gallery_id = gs.gallery_id
JOIN rot_gal2tag on rot_gal2tag.gallery_id = gs.gallery_id
JOIN rot_thumbs as gt on gt.thumb_id = gs.thumb_id
WHERE 1 = 1 AND gi.gallery_status = 'active' AND gi.gallery_type = 0 and gs.best_thumb = 'yes'
and gi.sponsor_id NOT IN ('3') and gs.group_id = 0
AND gs.gallery_id IN (SELECT gallery_id FROM rot_gal2tag WHERE tag_id IN ('117') )
group by gs.gallery_id, gs.thumb_id ORDER BY tested_thumb DESC, gs.total_ctr DESC LIMIT 0, 120;Code: Select all
SELECT SQL_CALC_FOUND_ROWS gs.gallery_id, gs.thumb_id, gi.sponsor_id, gi.content_count, gi.content_type, gs.total_shows, gs.total_clicks, gs.total_ctr, gt.thumb_url, gd.*, gi.content_count, gi.crop_profile_id, gs.activation_date, gi.added_date, gi.duration, gi.url, gi.gallery_total_shows, gi.sponsor_id, gi.source_url, gi.custom_gallery FROM rot_gallery_stats1 as gs
JOIN rot_gallery_info as gi on gi.gallery_id = gs.gallery_id
JOIN rot_gallery_data1 as gd on gd.gallery_id = gs.gallery_id
JOIN rot_gal2tag on rot_gal2tag.gallery_id = gs.gallery_id
JOIN rot_thumbs as gt on gt.thumb_id = gs.thumb_id
WHERE 1 = 1 AND gi.gallery_status = 'active' AND gi.gallery_type = 0 and gs.best_thumb = 'yes'
and gi.sponsor_id NOT IN ('3') and gs.group_id = 0
AND EXISTS (SELECT 1 FROM rot_gal2tag WHERE rot_gal2tag.tag_id IN ( 117 ) AND gs.gallery_id = rot_gal2tag.gallery_id )
group by gs.gallery_id, gs.thumb_id ORDER BY tested_thumb DESC, gs.total_ctr DESC LIMIT 0, 120;
то вариант без exits выполняется за 0.001 а вариант exists - 22 секунды
по тестам запрос без exists выиграывает на всех тагах кромее тех которых в базе больше 70к
их ИД
4755
12945
15184
что наталкиевет на мысль что это какое-то ограничение в мускле.
Что делать:
1. попробовать запросы в шеле что б повторить результаты и подтвердить ( или опровергнуть) этот тест
2. если с тестом все ок то либо искать что в мускле ограничивает либо удалить из базы эти 3 монстротага
Don't forget to run script update







