
Саша
10.10.2018
08:17:53

Ilia
10.10.2018
08:18:25


Crestoff
10.10.2018
08:20:18
0) перепиши запрос так:
SELECT SUM(visit_amount) AS raws,
COUNT(visit_amount) AS uniques,
SUM(click_amount) AS clicks,
ROUND(SUM(click_amount)/SUM(visit_amount)*100) AS prod,
SUM(is_bot) AS bots,
SUM(is_proxy) AS proxies,
SUM(is_no_cookie) AS nocookies,
FROM_UNIXTIME(TIME, "%H") AS hour
FROM log_visit
WHERE time BETWEEN 1539129600 AND 1539215999
GROUP BY FROM_UNIXTIME(TIME, "%H")
ORDER BY FROM_UNIXTIME(TIME, "%H") DESC,
raws DESC
1) в таком раскладе ЕДИНСТВЕННЫЙ критерий оптимизации -- это выборка диапазона по time.
Нужен любой индекс по time или где это первая колонка.
Для больших диапазонов типа месяца, недели, где более 5% записей таблицы, этот индекс всё равно бесполезен.
2) GROUP BY оптимизируется только выделением большего количества памяти под сервак, на кэш (для Inno) и на буфера для обработки (какие это буфера -- не знаю, надо искать)
Спасибо, сейчас попробую

Google

Crestoff
10.10.2018
08:20:30
ща покажу

Ilia
10.10.2018
08:20:52

Crestoff
10.10.2018
08:21:13
ща

Ilia
10.10.2018
08:23:23
ща
И ещё СОВСЕМ непонятно, на кой фиг почасовые раскладки ЗА МЕСЯЦ?
ЭТо 24 * 30 = 720 записей. Кому такое надо ?

Crestoff
10.10.2018
08:23:57
вот за неделю я имел виду запрос:
SELECT SUM(visit_amount) AS raws,
COUNT(visit_amount) AS uniques,
SUM(click_amount) AS clicks,
ROUND(SUM(click_amount)/SUM(visit_amount)*100) AS prod,
SUM(is_bot) AS bots,
SUM(is_proxy) AS proxies,
SUM(is_no_cookie) AS nocookies,
FROM_UNIXTIME(TIME, "%e %M") AS DAY
FROM `log_visit`
WHERE `time` BETWEEN 1535760000 AND 1536501600
GROUP BY `day`
или я не понял твоего вопроса

Ilia
10.10.2018
08:25:03
Макс. 10-30

ко?TEXHIK
10.10.2018
08:26:08

Google

Ilia
10.10.2018
08:26:40

Старый
10.10.2018
08:27:45
кто использует пагинацию?


Crestoff
10.10.2018
08:27:48
0) перепиши запрос так:
SELECT SUM(visit_amount) AS raws,
COUNT(visit_amount) AS uniques,
SUM(click_amount) AS clicks,
ROUND(SUM(click_amount)/SUM(visit_amount)*100) AS prod,
SUM(is_bot) AS bots,
SUM(is_proxy) AS proxies,
SUM(is_no_cookie) AS nocookies,
FROM_UNIXTIME(TIME, "%H") AS hour
FROM log_visit
WHERE time BETWEEN 1539129600 AND 1539215999
GROUP BY FROM_UNIXTIME(TIME, "%H")
ORDER BY FROM_UNIXTIME(TIME, "%H") DESC,
raws DESC
1) в таком раскладе ЕДИНСТВЕННЫЙ критерий оптимизации -- это выборка диапазона по time.
Нужен любой индекс по time или где это первая колонка.
Для больших диапазонов типа месяца, недели, где более 5% записей таблицы, этот индекс всё равно бесполезен.
2) GROUP BY оптимизируется только выделением большего количества памяти под сервак, на кэш (для Inno) и на буфера для обработки (какие это буфера -- не знаю, надо искать)
переписал, но как я и говорил - выполение в три раза дольше, хоть он и логически правильнее :)


ко?TEXHIK
10.10.2018
08:28:37

Crestoff
10.10.2018
08:28:56
построение графиков, разумеется, будет.

ко?TEXHIK
10.10.2018
08:29:11
ну вот я же говорил
*сорян, накаркал)

Ilia
10.10.2018
08:29:25

Crestoff
10.10.2018
08:30:09
мне нужен выход из сложившейся ситуации

Ilia
10.10.2018
08:30:25
Ну ладно тады успехов.

Crestoff
10.10.2018
08:30:58
как я понял - выход это пока вертика

Ilia
10.10.2018
08:32:33
мне нужен выход из сложившейся ситуации
По большому счёту надо задачу ставить по-другому.
Этот запрос (группа запросов) оптимизируется слабо или вообще никак.
Тебе надо в зависимости от того, что запросил пользователь, генерировать разные запросы так, чтобы они были по возможности оптимальнее.
Оптимальнее -- это как можно меньше диапазон и правильная группировка.
Если ты кстати уложешь сразу дату-время именно как дату и время, будет проще.

Crestoff
10.10.2018
08:34:41
@mikhalken @TEXHIK Виктор
ребят, всем спасибо!

Terminator
10.10.2018
10:34:06
Spe4u будет жить. Поприветствуем!

Google

Terminator
10.10.2018
10:36:00
@ky4k0b будет жить. Поприветствуем!

freecod
10.10.2018
11:26:19
Гайз, не подскажете типовую схему БД для склада, со случаем когда товары имеют срок годности и возможны приход, списание, перемещение? Чет у меня какая-то громоздкая схема получается, кажется что должно быть все проще

Stanislav
10.10.2018
11:28:04
Захотел - делаешь свои дела, захотел - пошёл в коковоркинг работать, захотел - улетел в Болгарию.
Прелесть удалённой работы - свобода.
Это же конечно когда нет анального контроля.

freecod
10.10.2018
11:42:39
вот такая схема пока выходит, учитывает возможность отменить проведение документа

Ilia
10.10.2018
12:13:21

Yaroslav
10.10.2018
12:18:21

freecod
10.10.2018
12:21:35
Да нет, реальную пытаюсь набросать. Мне не нравятся стейджи для контроля распроведения, дублирование данных в таблице документов к товарам и то же в проведенных. Кучу логики проведения придется в коде реализовать и там контролировать целостность (уменьшить остатки при распроведении). Не красиво мне чёт)
Я думаю есть какие-то готовые решения на эту тему, хочу посмотреть, может там красивее решено

Terminator
10.10.2018
12:57:34
Purple Ralf будет жить. Поприветствуем!

Purple
10.10.2018
12:59:01
Привте, есть вопрос, нужно сделать поиск (MySQL) в таблице по id, делаю через like, но штука в тому что если например я ввоожу %71% то ищет результаты, а если %714%, то вообще 0, хотя в базе есть 714б 714 и так далее

Terminator
10.10.2018
13:50:13
@Dmitriy_Kiselyov будет жить. Поприветствуем!

Ilia
10.10.2018
13:51:38

Purple
10.10.2018
13:52:11

Fike
10.10.2018
13:52:16

Purple
10.10.2018
13:52:40

Google

Ilia
10.10.2018
13:53:09

Fike
10.10.2018
13:53:36
кто-то захотел
неведомая сущность

Yevgeny
10.10.2018
14:01:41
нигде вроде и не написано что id здесь какой-то ключ, хотя бы пусть и суррогатный. может у них по style guide все ключи это entity_id например. А id это... ну iнформация о doкументе

Ilia
10.10.2018
14:05:29

Purple
10.10.2018
14:14:02

Ilia
10.10.2018
14:14:32

Purple
10.10.2018
14:14:53

Fike
10.10.2018
14:15:08
> integer
> like
#проклято

Evgeny
10.10.2018
14:17:37
>хотя в базе есть 714б 714 и так далее
>INT
я конечно всё понимаю, но вот этого не понимаю

Ilia
10.10.2018
14:18:21
Integer
Ну, и чё ты нам будешь затирать ещё?

Purple
10.10.2018
14:25:05
Не понимаю реакции людей
Просто спросил, а говна...

Ilia
10.10.2018
14:26:06
Ладно, не важно, Главное -- чтобы ты хорошо учился...

Evgeny
10.10.2018
14:26:12
два вывода в студию
show create table;
select count(*) from table where id = '714б 714 ';

Fike
10.10.2018
14:38:00

Evgeny
10.10.2018
14:56:10
моя очередь задавать вопросы

Google

Fike
10.10.2018
14:56:48
в брокере-то отметился?

Evgeny
10.10.2018
15:01:49
в mariadb в огромную myisam таблицу всегда в конец делаются инсерты в большом количестве скажем с 10 сессий. В какой-то момент, когда нагрузка становится невыносимой, происходит следующее. Лочится таблица, висит инсерт и не может заинсертится, дальше приложуха, которая создала сессию, киляет ее через 20 сек. В мускуле я вижу эту сессию как "Unlocking tables", но уже killed. И, судя по show processlist она так продолжает висеть в течение 120-130 секунд. Соотвественно все остальные сессии от других аппликашек висят с инсертами в статусе System lock (20 сек пока их не кильнут и так по кругу)
вопрос - как работает этот kill? я вроде читал, что он помечает флагом процесс и дальше в мускуле есть систем луп, который циклически проверят сессии. Если он натыкается на процесс с флагом киллед, то он выпиливает его с концами
или я чего-то не так понял?
почему у меня сессия висит killed - Unlocking tables в течение 2-3 минут?

Al
10.10.2018
15:04:28

Evgeny
10.10.2018
15:04:40
это прод
надо лечить быстро
оптимизацией занимаемся уже

Fike
10.10.2018
15:05:07
Может быть, дело в движке таблицы? ???

Al
10.10.2018
15:06:02