Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JOIN с большим пересечением 
V
    Опции темы
maxipub
  Дата 15.7.2014, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Добрый день!

Ребята, помогите с запросом. Вроде бы ничего сврехзаурядного, но все никак... smile 

Есть таблицы:

users - таблица юзеров (user_id INT PRIMARY, registered INT, ...)
post - таблица постов (post_id INT PRIMARY, user_id INT, timestump INT, ...) - для каждого юзера может быть множество записей!
stat - статистика юзера (stat_id INT PRIMARY, user_id INT, ...) - для каждого юзера может быть множество записей!

Указал только колонки, которые нас интересуют... Сорри, что без дампа, на проекте там куча разных полей, проще описать только значимое.

Необходимо выбрать данные статистики для пользователей, которые зарегистрированны с 1111111111 по 2222222222, и имеют посты, сделанные с 3333333333 по 4444444444.

Т.е. берем таблицу юзеров. Дальше джойним посты, p.user_id=u.user_id. На этом этапе проблем нет, все летает. Далее надо заджойнить стату, s.user_id=u.user_id и указываем условия по времени.

Код

SELECT ... FROM users AS u 
INNER JOIN post AS p ON p.user_id=u.user_id 
INNER JOIN stat AS s ON s.user_id=u.user_id 

WHERE 

u.registered > 1111111111 AND 
u.registered < 2222222222 AND 
p.timestump > 3333333333 AND 
p.timestump < 4444444444 

GROUP BY s.stat_id


Все это подвисает даже на таблицах с 10 строками. Чувствую, что где-то жестко затупил, но не могу понять где?
PM MAIL   Вверх
ТоляМБА
Дата 15.7.2014, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



А если попробовать через Between?

Код
Where
(u.registered Between 1111111111 AND  2222222222) AND
(p.timestump Between 3333333333 AND 4444444444 )

PM   Вверх
maxipub
Дата 15.7.2014, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



ТоляМБА, уже не знаю что и делать, тупик, так что попробовал. smile

То же самое. smile 

Я вообще никогда не понимал смысла этого Between.
PM MAIL   Вверх
ТоляМБА
Дата 15.7.2014, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



maxipub, а registered и timestump у тебя индексированы?
PM   Вверх
maxipub
Дата 15.7.2014, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Это какой-то цирк...

Цитата(maxipub @  15.7.2014,  15:39 Найти цитируемый пост)
Все это подвисает даже на таблицах с 10 строками. Чувствую, что где-то жестко затупил, но не могу понять где? 

Чуть описался. Тут я имел в виду не таблицы, а что результатов будет на 10 строк, т.е. не большой объем.

Мне аж стыдно. Но дело в том, что и сами таблицы небольшие. Там по 100к записей, общим объемом 50 мегов.

Раньше сталкивался с тем, что ждойны по нескольким таблам при неосторожности могут генерить огромнейшие результаты через временную таблицу и от этого жутко тормозить. Но там всегда проблемой был лишь нереальный объем сгенерированных данных, которые раздувались и долго-долго свопились. Я и подумать не мог, что тормоза на таких малых объемах могут быть из-за индекса. Ну ладно там, не 0.0001 сек, а 5-10 сек запрос выполняется - вижу, тормозит, врубил профилирование, эксплейн, и погнали... Но тут я 10 минут ждал! В общем, вем живи - век учись...

ЗЫ: добавил индекс на s.user_id, все полетело.

Пробовал потом на таймстампы ставить, c SQL_NO_CACHE запускал, разницы не было. Проблема была именно в джойнах.

ТоляМБА, спасибо огромное, товарищ! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0895 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.