powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь с JOIN'ом
8 сообщений из 8, страница 1 из 1
Нужна помощь с JOIN'ом
    #38346860
free.arhey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Нужна помощь опытных людей. У меня есть несколько SQL запросов которые отлично выполняют свою работу...первый выбирает из таблицы два рандомных значения, второй в цикле подыскивает в другой таблице необходимые данные (цикл срабатывает дважды).

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT rand 
FROM names 
WHERE rand 
NOT IN (SELECT rand FROM dislike WHERE ip = 'USER_IP') 
AND rand NOT IN (SELECT rand FROM top WHERE ip = 'USER_IP') 
ORDER BY RAND() 
LIMIT 2



Код: plsql
1.
SELECT url_hd, title FROM users WHERE rand='RAND_FROM_T1' ORDER BY RAND() LIMIT 1



Т.е. для полной загрузки выполняется 3 запроса. На данный момент все 3 запроса выполняются примерно за 150мс. Все бы хорошо, но за пять минут страница может быть перезагружена раз 50. И общее количество запросов сильно увеличивается.

При попытке сделать все через один запрос с JOIN'ом время исполнения начало зашкаливать за 400мс, что меня совершенно не устраивает. Возможно ли имеющееся сжать до 1ого запроса не потеряв в скорости исполнения?

Буду благодарен за любую помощь!
...
Рейтинг: 0 / 0
Нужна помощь с JOIN'ом
    #38346867
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
free.arhey,

Последний запрос идет под номером 4. Поиск того, чего нет (NOT IN) вообще вещь удивительная.
...
Рейтинг: 0 / 0
Нужна помощь с JOIN'ом
    #38346869
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нужна помощь с JOIN'ом
    #38346876
free.arhey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
deblogger, первый запрос составной, а второй запрос повторяется в цикле. SELECT'ов действительно получается 5ть, но вот обращений к базе всего три. Так что вопрос не в количестве селектов, а в количестве обращений к БД.
...
Рейтинг: 0 / 0
Нужна помощь с JOIN'ом
    #38346878
free.arhey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
deblogger, такого рода запрос я и протестировал. И как я написал уже, скорось исполнения упала раза в три и это не нормально.
...
Рейтинг: 0 / 0
Нужна помощь с JOIN'ом
    #38346879
free.arhey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще важный момент в моем запросе происходит двойной рандом. Сначала выбираются два случайных rand, после чего для каждого из них подбираются строки также наугад.
...
Рейтинг: 0 / 0
Нужна помощь с JOIN'ом
    #38346907
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
free.arheyДобрый день!

Нужна помощь опытных людей. У меня есть несколько SQL запросов которые отлично выполняют свою работу...первый выбирает из таблицы два рандомных значения, второй в цикле подыскивает в другой таблице необходимые данные (цикл срабатывает дважды).

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT rand 
FROM names 
WHERE rand 
NOT IN (SELECT rand FROM dislike WHERE ip = 'USER_IP') 
AND rand NOT IN (SELECT rand FROM top WHERE ip = 'USER_IP') 
ORDER BY RAND() 
LIMIT 2



Код: plsql
1.
SELECT url_hd, title FROM users WHERE rand='RAND_FROM_T1' ORDER BY RAND() LIMIT 1



Т.е. для полной загрузки выполняется 3 запроса. На данный момент все 3 запроса выполняются примерно за 150мс. Все бы хорошо, но за пять минут страница может быть перезагружена раз 50. И общее количество запросов сильно увеличивается.

При попытке сделать все через один запрос с JOIN'ом время исполнения начало зашкаливать за 400мс, что меня совершенно не устраивает. Возможно ли имеющееся сжать до 1ого запроса не потеряв в скорости исполнения?

Буду благодарен за любую помощь!

а пробовал заменить по типу

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * from table t1
where t1 not in (select field1 as f1 from table2 t2 where t2.f1 = t1.field1)

#===

select * from
table1 t1 left join table2 t2 on (t1.field1 = t2.field2)
where t2.field1 IS NULL



учитывая что у тебя две таблицы где проверяем на несовспадение - порядок их просмотра - попробовать один и обратный вариант.
...
Рейтинг: 0 / 0
Нужна помощь с JOIN'ом
    #38346923
free.arhey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453, если я правильно понял предложение касается лишь ускорения not in'ов, а они то как раз работают быстро. Моя проблема в первую очередь в том что я не могу объединить никак два приведенных запроса в один, получив тот же результат и уменьшив количество обращений к БД до одного...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь с JOIN'ом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]