
Vasily
04.04.2017
15:47:13
Я в свое время писал собственный mvvm фреймворк,там навигация была организована через команды
Правда,я там и всю отрисовку в шаблонах делал

Nikolay
04.04.2017
17:30:39
Как запрос оптимизировать можно?
select user_models.*, count(user_id) as count_messages
from chat_logs
inner join user_models on user_models.id = user_id
where chat_id = ?
group by user_id
В таблице 100к записей, запросом выбирается 100 записей, занимает 2 секунды

Google

Alexander
04.04.2017
17:32:03
проверить наличие индексов

Nikolay
04.04.2017
17:32:11
БД mysql если что
Точнее mariadb

Андрей
04.04.2017
17:34:35

Nikolay
04.04.2017
17:37:37
Да, на айдишниках индексы стоят
Без inner join запрос выполняется 1 секунду

Андрей
04.04.2017
17:42:55
Ну вот и на джоин приходится секунда вторая

Nikolay
04.04.2017
17:43:36
В любом случае, не слишком ли медленно?
Две секунды на простой запрос к таблице где не так много данных, жирно

Дмитрий
04.04.2017
17:45:47
В 100 раз Карл!

Nikolay
04.04.2017
17:50:21
Добавил user_id и chat_id в отдельный индекс, на секунду быстрее стало
Теперь с inner join быстрее выборка происходит?

Google

?? Denis
04.04.2017
18:10:22
Покрывающие индексы это очень хорошо

Axm
04.04.2017
18:10:42
Ты смотри план и что там жрет время
И не быстрее ли будет поменять таблицы местами?

Nikolay
04.04.2017
18:12:15
Щас посмотрю
А план как посмотреть?

Axm
04.04.2017
18:12:49
Хуй знает

?? Denis
04.04.2017
18:13:59
оптимизатор сам знает в каком порядке таблицы джойнить
нормальный оптимизатор

Владимир
04.04.2017
18:20:20

Nikolay
04.04.2017
18:20:27
mariadb

Axm
04.04.2017
18:31:53

Vladimir Bondaryuk
04.04.2017
18:33:37
А если вместо count(...) Написать count(1)

Axm
04.04.2017
18:37:57
вообще в воркбенче и наверно в других клиентах будет визуально

Vladimir Bondaryuk
04.04.2017
18:44:07
Просто интересно будет ли такой запрос быстрее, попробуй:
select
user_models.*,
count(1) as count_messages
from chat_logs
inner join user_models on user_models.id = user_id and chat_id = ?
group by user_id

Nikolay
04.04.2017
18:45:14

Vladimir Bondaryuk
04.04.2017
18:49:33
Не получилось :)

Ilya
04.04.2017
18:52:12
я может чё не понимаю, но как можно выбрать в селект столбцы, которых нет в аггрегирующей функции?

Google

Axm
04.04.2017
18:53:14
Он из той таблицы не берёт ничего кроме каунта

Alexander
04.04.2017
18:54:21
мускуль умеет

Ilya
04.04.2017
18:54:26
user_models.*, - это тогда что?
ааа и какой будет результат?

Nikolay
04.04.2017
18:54:41

Axm
04.04.2017
18:55:52
Вообще я бы по рукам бил за отсутствие алиасов везде

Vladimir Bondaryuk
04.04.2017
18:56:22

Nikolay
04.04.2017
18:56:27
А нафиг здесь алиасы?

Vladimir Bondaryuk
04.04.2017
18:57:37
А если он их(столбцы без агр. функции не группирует) то зачем там group ?

Axm
04.04.2017
18:58:15
Чтобы не гадать какой столбец откуда и в будущем не ловить баг ambiguous column

Alexander
04.04.2017
18:58:38
"MySQL допускает выполнение запросов, не удовлетворяющих данному правилу. При этом для полей без групповых функций и не указанных в части GROUP BY выбирается произвольная строка из группы"

Nikolay
04.04.2017
18:58:43

Gid
04.04.2017
19:47:51
Вот как раз оно для оптимизации
Например на рассово верную арийскую сверх базу - мсскл

Axm
04.04.2017
19:48:31
На оракл!

Gid
04.04.2017
19:48:35
Мы же не пхп кодеры в конце концов

Nikolay
04.04.2017
19:49:01
Ну не знаю, на слабом железе хостить mssql такое

Gid
04.04.2017
19:49:34
Бесплатно

Google

Gid
04.04.2017
19:49:41
Абсолютно
Безвозмездно
На мсскл

Nikolay
04.04.2017
19:49:54
К тому же, мне не нужно гигабайты данных перебирать сложными запросами

Gid
04.04.2017
19:51:25
Почему?
Там достаточно мощный сервер

Admin
ERROR: S client not available

Gid
04.04.2017
19:52:00
Разворачиваешь базу в 2 клика
В франкфурте

Nikolay
04.04.2017
19:52:18
Угу, а сервер в России
И гоняй данные туда-сюда

Gid
04.04.2017
19:52:30
Тоже в Германии
И пинг 0

Nikolay
04.04.2017
19:52:51
Короче, такое себе
Мне лучше базу хостить у себя

Gid
04.04.2017
19:53:00
Ну разве что тебе нужно деплоить локально

Nikolay
04.04.2017
19:53:25
Вырубаю

Google

Nikolay
04.04.2017
19:53:38
У меня raspberry есть, на ней всякие свои тулзы хостятся

Gid
04.04.2017
19:53:52
А тогда ок
Если на расбери
Тогда 100% оправдано

Nikolay
04.04.2017
19:54:11
;)

Gid
04.04.2017
19:54:21
Если полноценно чето разворачивать то я б брал такую связку
Оч быстро выходит
И многим клиентам хватает
Обычно лоулоад и они базу особо не дрючат
А 20гб я хз сколько написать можно

Nikolay
04.04.2017
19:55:58
Ну серьёзно, неужели mysql не может быстро выборку сделать из 100к записей?

Андрей
04.04.2017
19:57:01
А почему не постгрес? На слабом железе тоже на ура

Nikolay
04.04.2017
19:57:28
Вот я и думаю, почему не постгрес)
Но постгрес вроде тоже не идеален

Леонид
04.04.2017
19:59:52
Щас бы не асилилить авс или ажуру
Где под сракой мощные сервера

Nikolay
04.04.2017
20:00:58
Угу
И хостить там телеграм бота
Эта группа больше не существует