@dba_ru

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

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

Al
25.08.2017
01:43:07
Либо админы)
Покажешь нам cql? :)

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 отдельные

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
индекс на status и project_domain и created отдельные
Это вопрос или утверждение ? Где там status? На status индекс не нужен Далее моё утверждение: надо либо составной индекс, (created, project_domain), либо только (created) . Как лучше — зависи от данных.

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
по поводу составного ключа - да, но я ожидал услышать как оптимизировать between
BETWEEN оптимизировать индексом по полю, по которому between.

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

Я так понимаю, у тебя будут пользователи, зарегестрированные в период порядка полутора двух недель. По идее , это должно быть немного.

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

2-3с between работает

Ilia
25.08.2017
09:16:46
2-3с between работает
Так всё-таки ты о ПРОИЗВОДИТЕЛЬНОСТИ, а не о ТРУДОЁМКОСТИ....

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: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
Можно там только память под кэш выделять больше, сортбуфера больше делать и прочее, чтобы он быстрее считало, но это будет в разы, а не на порядки.

видимо тут нужна другая БД, аналитическая
Ну, если будет columnstore то да, ей такие объёмы как семечки.

Но ты же не будешь от одного запроса всё СУБД менять.

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 " — это что?

т.е. взять кусок данных из mysql и кусок данных из 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
Ты знаешь, что в теории нет различия между теорией и практикой ? Но на практике, различие есть.

Страница 214 из 718