
Fike
24.08.2017
20:17:09
Откуда у нас столько, как бы не обвинили в сексизме, разнообразия? В кубернетесе вон только одна Алиса, и та мужик.

Ilya
24.08.2017
21:06:35
Эффект бабы в поле?

Al
25.08.2017
01:43:07

Kirill
25.08.2017
07:33:19
насколько адекватный запрос, судя только по нему без схемы в плане трудоемкости без экономии на спичках ?
SELECT
DATE_FORMAT(created, '%Y-%m-%d') AS date,
SUM(
CASE status
WHEN 'active' THEN 1
WHEN 'finished' THEN 1
ELSE 0
END
) AS subscriptions,
SUM(
CASE LEFT(phone,4)
WHEN 'temp' THEN 1
ELSE 0
END
) AS temp
FROM
users
WHERE
created BETWEEN '2017-08-15' AND '2017-08-26' AND project_domain = 'example.net'
GROUP BY date

Google

Kirill
25.08.2017
07:34:07
индекс на status и project_domain и created отдельные

Ilia
25.08.2017
09:04:17

Kirill
25.08.2017
09:04:30
я написал

Ilia
25.08.2017
09:04:41
Нет

Kirill
25.08.2017
09:04:56
ещё раз прочитай)

Ilia
25.08.2017
09:04:57
Может быть ты и написал, но ЛЮДЯМ НЕПОНЯТНО!
Да я и с первого раза прекрасно всё понимаю.

Kirill
25.08.2017
09:06:07
смешной ты

Ilia
25.08.2017
09:06:12
Ну, в плане трудоёмкости — очень простой запрос, такой пишется за 5 минут

Ilya
25.08.2017
09:06:25
индекс на status и project_domain и created отдельные
лiл
оставляй индекс по времени
а остальные дропай

Google

Ilya
25.08.2017
09:07:01
один хуй не будут работать

Kirill
25.08.2017
09:07:19
в проекте не один этот запрос
это дополняющая инфа
@MasterZiv интересно по каким параметрам ты класифицировал запрос как простой

Ilia
25.08.2017
09:11:37

Ilya
25.08.2017
09:12:08

Kirill
25.08.2017
09:12:29
любой запрос можно повесить, зависит от размера данных,

Ilia
25.08.2017
09:12:39
А, сори не догадался. Ты Reply жми, тогда будет всё понятно.

Ilya
25.08.2017
09:12:57
он бы еще по каждой паре полей индексы создал и по тройке в разном порядке

Kirill
25.08.2017
09:13:00
по поводу составного ключа - да, но я ожидал услышать как оптимизировать between

Ilya
25.08.2017
09:13:04
ну а че. а вдруг?

Ilia
25.08.2017
09:13:58
Будет ли индекс работать, зависит от количества данных, попадающих в данный конкретный диапазон.
Я так понимаю, у тебя будут пользователи, зарегестрированные в период порядка полутора двух недель. По идее , это должно быть немного.

Kirill
25.08.2017
09:16:21
3кк, но бывает больше данных
2-3с between работает

Ilia
25.08.2017
09:16:46

Kirill
25.08.2017
09:17:52
одно из другого не следует?

Google

Ilia
25.08.2017
09:18:17
Нет

Kirill
25.08.2017
09:19:04
по делу давай
тебя слишком много

Ilia
25.08.2017
09:20:19
Короче, индекс на (created, project_domain), если доменов в таблице много (тыщи), либо (created) если доменов в таблице мало (десятки).

Kirill
25.08.2017
09:20:38
спасибо, я сделал связный
доменов не тыщи, но ускорило в 3 раза
доменов 20

Ilia
25.08.2017
09:22:47
Запросы вроде
select created, project_domain, count(*) /(select count(*) from users) as sel from users group by created, project_domain order by count(*) desc limit 20
помогут тебе оценить селективность.
Если она проценты и менее (т.е. менее 0.01) — индекс стоит.
Если больше — не стоит.

Kirill
25.08.2017
09:23:37
мне предлагали избавиться от betwen и отрефакторить дату как таймштамп
я бы хотел это попробовать в последнюю очередь
интересует, что можно сделать ещё, т.к. дата типа datetime

Ilia
25.08.2017
09:25:03

Ilia
25.08.2017
09:25:20
Какая разница, какого типа данных это время ?

Kirill
25.08.2017
09:27:03
mysql 5.5.50

Ilia
25.08.2017
09:27:59
Можно ещё попробовать в составной индекс добавить ещё поле date.
Но это надо смотреть.

Kirill
25.08.2017
09:28:01

Ilia
25.08.2017
09:28:12
timestamp — это не int к тому же

Google

Ilia
25.08.2017
09:29:15
Хотя щаз гляну...
Да, я прав.

Kirill
25.08.2017
09:30:22
bigint можно

Ilia
25.08.2017
09:30:32

Kirill
25.08.2017
09:30:48
3 000 000 строк в таблице
пол таблицы попадает под ограничение даты

Ilia
25.08.2017
09:31:29
в таблице строк сколько — по барабану, сколько строк приходится на это твоё конкретное условие between этих двух конкретных дат

Admin
ERROR: S client not available

Ilia
25.08.2017
09:31:58
Агрегация 1.5 млн записей — ну, согласись, непросто
И чё. за две недели полтора миллиона пользователей ?

Kirill
25.08.2017
09:33:14
ага
потенциальных пользователей
если быть точнее

Ilia
25.08.2017
09:34:41
Короче выполни запросик со статистикой, только дату там приведи именно к дате, т.е. отбрось время.
Можно также сгруппировать по дням, неделям и другим периодам, когда ты будешь считать этот запрос примерно.
Если в группах будет много записей — индексы бесполезно создавать.
Ну и поскольку других SARG-ов нет, то запрос обречён.

Kirill
25.08.2017
09:35:40
видимо тут нужна другая БД, аналитическая

Ilia
25.08.2017
09:35:53
Можно там только память под кэш выделять больше, сортбуфера больше делать и прочее, чтобы он быстрее считало, но это будет в разы, а не на порядки.
Но ты же не будешь от одного запроса всё СУБД менять.

Google

Kirill
25.08.2017
09:37:10
возможно нужно будет проект переписывать, думаю на будущее если только
вот я с этим не связывался, не знаю как делать выборки, где нужно связать две разные БД, сджоинить

Ilia
25.08.2017
09:38:16
С чем?

Kirill
25.08.2017
09:38:34
ну вот тот же mysql и clickhouse

Ilia
25.08.2017
09:38:44
Нормально, если запрос 2-3 секунды работает, и хрен с ним, пусть потормозит.
clickhouse врядли тебе подойдёт. Там просто SQL немного не поддерживается...

Kirill
25.08.2017
09:40:49
т.е. взять кусок данных из mysql и кусок данных из ch и на уровне какой-то из бд связать эти данные , отфилтровать и получить результат нельзя?

Ilia
25.08.2017
09:41:18
"кусок данных из ch " — это что?

Kirill
25.08.2017
09:42:19
ну например в mysql у нас пользователи, а в CH информация подробная по каждому из них для статистических запросов, иногда нужно получить данные по конкретному пользователю и получить данные одновремено из обеих баз данных

Ilia
25.08.2017
09:42:47
Тем более изза запроса, выполняющегося 2 секунды. (или минуты ? Я забыл )

Kirill
25.08.2017
09:42:55
2 сек

Ilia
25.08.2017
09:43:04
Ну это вообще шикарное время.
чё тебе не нравится ? Для такого убитого запроса-то...
Тебе 2 секунды не подождать ?

Kirill
25.08.2017
09:44:25
интересно теоретически, есть вероятность что нужно будет что-то делать

Ilia
25.08.2017
09:45:24
Вот и что мне на это отвечать ?

Kirill
25.08.2017
09:46:05
ну может есть инфа где-то , как делают в таких ситуациях

Ilia
25.08.2017
09:46:09
Ты знаешь, что в теории нет различия между теорией и практикой ?
Но на практике, различие есть.