powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
17 сообщений из 42, страница 2 из 2
Помогите оптимизировать запрос
    #38918792
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aramanMasterZiv,

Простите, а это что по вашему:
Код: sql
1.
AND (`t2`.`created_at` BETWEEN 't2.created_at' AND DATE_ADD(t1.created_at, INTERVAL -21 DAY)) 



только дайте конкретный ответ без холивара про бред и прочее. Либо научитесь вести конструктивный диалог, раз мой русский хромает с ваших слов.

Это к чему -- я не понял.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918797
araman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Прикладываю скрин индексов.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918817
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aramanА как вы кол-во будете считать в таком случае?А зачем?aramanСуть в чем, нужно выбрать только те uid которые заходили на сайт в течение 21 дня и более
aramanДа и запрос выполняется тоже 0.5 секунды.Значит, быстрее уже не получится. Если у вас индексы на условие отбора уже есть.
MasterZivГде ключи или хотя бы один индекс ?Настоящим джыдаям они без надобности :)
aramanа это что по вашему:
Код: sql
1.
AND (`t2`.`created_at` BETWEEN 't2.created_at' AND DATE_ADD(t1.created_at, INTERVAL -21 DAY)) 

Не знаю, как по-его, а по-моему, это феерический бред. Либо вы просто случайно не те кавычки поставили.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918820
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirЛибо вы просто случайно не те кавычки поставили.Хотя... даже если бы это были "правильные" бэктики, бредовость от этого бы не уменьшилась... разве что ещё и номер таблицы там не тот указан
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918851
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aramanУточняю:
Интервал между первым и последним заходом пользователя от 21 дня.
Код: sql
1.
HAVING DATEDIFF(MAX(attend_date)-MIN(attend_date))>21
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918871
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aramanMasterZiv,

Прикладываю скрин индексов.

Эм, я тебе кажется уже написал, как надо получать индексы и как их показывать.
Именно потому, то (по моему подозрению) 80% указанного тут -- НЕ ИНДЕКСЫ.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918902
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araman Alex_Ustinov не понял, можно более подробно? Группировка в MySQL

aramantangliraraman,

ну так
Код: sql
1.
2.
3.
4.
5.
select uid
from the_table
where условия_отсечки (за месяц, кроме пользователей NN и т.п.)
group by 1
having datediff(max(created_at),min(created_at))>=21



А как вы кол-во будете считать в таком случае? Да и запрос выполняется тоже 0.5 секунды.
В моем примере он еще выдает общее кол-во заходов.
select uid, count(*) ...

И чтобы не гадать, покажите ваш вариант этого запроса с планом.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918911
araman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
retvizan,

Я же указал в 1 сообщении свой итоговый запрос, который работает и выводит то что нужно. Но как мне кажется - он медленный(хотя для ~70к записей на простом VPS это может быть и нормально). Поэтому я и обратился сюда, чтобы гуру подсказали можно ли такое оптимизировать. Вместо того чтобы вникнуть, почти на 2 страницах идет пустой холивар про индексы и прочее. Причем я уверен, что господин MasterZiv немного не понимает самого вопроса. Индексы важны, спора нет, но для начала нужно иметь хотя б запрос, чтобы корректно их расставить.

Я написал свой вариант, описал что я хотел бы получить в итоге. Буду рад конкретной помощи, а не переливания из пустого в порожнее про русский язык и прочую ахинею. Извините уж, но некоторые мессаги я считаю именно таким.

Хорошо, я согласен что джойн самого на себя это бред, всему руками и ногами ЗА что это бред. Может кто-нибудь написать как получить результат без этого джойна? Буду очень признателен за помощь, а не критику, которая не касается непосредственного вопроса.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38918936
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aramanХорошо, я согласен что джойн самого на себя это бред, всему руками и ногами ЗА что это бред. Может кто-нибудь написать как получить результат без этого джойна? Буду очень признателен за помощь, а не критику, которая не касается непосредственного вопроса.

Тебе уже кажется раза 3 написали запрос или идею как его сделать.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920281
araman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем получился такой запрос(выводит то что нужно, и без горе-джойна самого на себя):

Код: sql
1.
SELECT `t1`.`uid`, `t1`.`created_at`, COUNT(uid) AS `count` FROM `stats` `t1` WHERE `t1`.`uid` NOT IN (9421802727) AND `t1`.`ip` NOT IN (3579284812) GROUP BY t1.uid HAVING DATEDIFF(MAX(`t1`.`created_at`), MIN(`t1`.`created_at`)) >= 21 ORDER BY `count` DESC LIMIT 60



Но время выполнения все равно осталось прежним(~0,5сек).
Прикладываю индексы, теперь можно что то сделать или это уже "предел" для этой машины?
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920287
araman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикладываю так же explain

По офтопу: Можно как то месаги здесь редактировать? А то в предыдущей хотел переносы добавить к запросу.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920299
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araman,

в group by надо добавить t1.created_at:

GROUP BY t1.uid, t1.created_at
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920303
araman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мм, тогда почему то вообще возвращается 0 элементов.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920304
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-таки наверное неправильно я сказал, по created_at лучше не групировать, а агрегировать:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.uid, MAX(t1.created_at) as created_at, COUNT(uid) AS count 
FROM stats t1
WHERE t1.uid NOT IN (9421802727) 
  AND t1.ip NOT IN (3579284812) 
GROUP BY t1.uid 
HAVING DATEDIFF(MAX(t1.created_at), MIN(t1.created_at)) >= 21 
ORDER BY count DESC 
LIMIT 60



Но либо одно, либо другое надо сделать.

araman Но время выполнения все равно осталось прежним(~0,5сек).
Прикладываю индексы, теперь можно что то сделать или это уже "предел" для этой машины?

Смотрим ещё раз на запрос:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.uid, MAX(t1.created_at) as created_at, COUNT(uid) AS count 
FROM stats t1
WHERE t1.uid NOT IN (9421802727)  -- не SARG -- не оптимизитуется.
  AND t1.ip NOT IN (3579284812)  -- не SARG -- не оптимизитуется.
GROUP BY t1.uid   -- оптимизитуется при наличии индекса с лидирующей t1.uid
HAVING DATEDIFF(MAX(t1.created_at), MIN(t1.created_at)) >= 21 
ORDER BY count DESC 
LIMIT 60



Итого -- запрос почти не оптимизируется, потому что обрабатывает все записи из таблицы stats.
В плане в лучшем случае ты можешь избавится от сортировки (filesort).

Ещё раз хочу тебе предолжить:

создать справочник пользователей. Записей там будет существенно меньше (если сайт активный), чем в

добавить туда поля -- первый вход и последний вход.

выбирать запросом пользователей именно оттуда, а не из статистики.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920308
araman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Спасибо огромное!

Идею про справочник понял, завтра попытаюсь на тестовом сервере "провернуть" этот момент. Отпишу о результате.
Теоретически да, записей там будет в разы меньше. Соответственно выборки будут практически тривиальными и работать гораздо оперативнее.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920312
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aramanMasterZiv,

Спасибо огромное!

Идею про справочник понял, завтра попытаюсь на тестовом сервере "провернуть" этот момент. Отпишу о результате.
Теоретически да, записей там будет в разы меньше. Соответственно выборки будут практически тривиальными и работать гораздо оперативнее.

Заметь, что я тебе об этом писал ещё на первой странице.
А ты вместо того, чтобы думать головой и делать что говорят, кочевряжился.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38920315
araman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

ну... признаю ошибку :)
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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