@mysql_ru

Страница 11 из 142
Subb98
09.04.2017
09:42:46
Суть такова. Будут записи со значением 0, они должны быть в базе, но постоянной работы с ними не будет. Вернее, она будет, но не такая активная. И будут все остальные записи, которые будут проверяться таском каждые 25 сек., истёк ли у них timestamp.

Вот, собсно, и должны попасть в выборку только "активные" записи.

Dmitriy
09.04.2017
09:43:54
Значит between

Т.к. нужно диапазон хватать

Google
Dmitriy
09.04.2017
09:44:17
И индексы не забудь

А эвент делать можно и реже

Subb98
09.04.2017
09:44:47
Угу, сейчас explain'ом прошёлся, фильтрация увеличивается, но всё равно по всем строкам проходится.

А эвент делать можно и реже
В моём случае - не желательно.

Dmitriy
09.04.2017
09:45:51
Можно селектить с таймштампом

И тогда в выборку они попадать не будут

Subb98
09.04.2017
09:47:11
То есть, после SELECT указать timestamp и это автоматически отсеет нули?

Dmitriy
09.04.2017
09:47:29
Нет, ща распишу

Мне нужно было селектить живые записи, которые не протухли по timestamp

Я сделал отдельное поле active 0/1 значения

Subb98
09.04.2017
09:54:41
У меня будет даже не SELECT. У меня будет DELETE всех записей, которые имеют timestamp > 0, и которые при этом должны быть удалены на текущий момент (определяем по timestamp). Записи с нулями хранятся вечно.

Dmitriy
09.04.2017
09:54:53
Ааа

Ну я продолжу

Google
Subb98
09.04.2017
09:56:00
Угу

Dmitriy
09.04.2017
09:56:01
Живую запись доставал: where active = 1 and timestamp > unix_timestamp(now())

А потом евент повесил раз в пол часа обновлять поле active

Нагрузка нормально просела прям

До этого 2 раза в минуту чекал

Правда у меея база 30гб)

Subb98
09.04.2017
09:58:39
Гм, я вот думаю, будет ли у меня возможность вешать event. Т.к. буду работать через сторонний скрипт и напрямую доступа к БД не будет, ну, то есть, только общение посредством запросов.

В настройки mysql не лезем.

И БД будет конечно не таких объёмов =)

Dmitriy
09.04.2017
09:59:26
Зависит от прав

Если мускул не даст, то cron - наше все

Но там минимальный период - 1 минута

Subb98
09.04.2017
10:00:35
Ну тогда это точно не мой вариант, юзеры тупо не разберутся с этим. Пишу под http://amxmodx.org/api/

Dmitriy
09.04.2017
10:00:53
Можно извратиться через && запускать скрипты и слипить

Subb98
09.04.2017
10:01:55
Прикол ещё в чём. БД окажется на каком-нибудь shared хостинге. И у юзера не будет возможности всё детально настроить.

Как вариант

Dmitriy
09.04.2017
10:02:15
Это возможно

Для базы - vps)

Subb98
09.04.2017
10:03:46
Поэтому, к сожалению, я пока ориентируюсь только на оптимизацию запросов, но задачи придётся реализовывать при помощи скрипта + запросов, как это не печально.

Dmitriy
09.04.2017
10:05:04
Ну при индексе по timestamp будет работать быстро

Google
Subb98
09.04.2017
10:05:37
Ну да, только unique боюсь делать.

Придётся обойтись обычным.

Dmitriy
09.04.2017
10:05:50
Не нужно там uniq

Двух записей в секунду не будет?

Subb98
09.04.2017
10:06:23
Это возможно.

Dmitriy
09.04.2017
10:07:04
Ну я о том, что будут записи, которые в одно время протухнут

Subb98
09.04.2017
10:07:33
Да, такое вполне может быть. За секунду скрипт вполне может добавить несколько записей одновременно.

Dmitriy
09.04.2017
10:08:59
Значит никаких уников

Subb98
09.04.2017
10:09:13
+

Всё-таки решил избавиться от нуля, изменил запрос таким образом: SELECT * FROM `some_table` WHERE `timestamp` <= UNIX_TIMESTAMP() IS NOT NULL

Dmitriy
09.04.2017
12:51:51
0 и null разные значения

И условие это не отработает

Ты на null проверяешь unix_timestamp текущий

Subb98
10.04.2017
09:22:07
0 и null разные значения
Ну да, я понимаю.

И условие это не отработает
Если использовать именно NULL вместо нуля, то ОК.

Aleksey
10.04.2017
20:15:57
А у тебя запрос не дольше будет отрабатывать . Тут тебе нужно будет проверять 2 типа значений число и нулл , а так индексы построил и поиск быстрей ?

Subb98
10.04.2017
20:24:36
Если честно, не проверял. Построю временную БД и поиграюсь как следует с explain'ом.

*временную таблицу, БД есть уже, по сути

Aleksey
10.04.2017
20:25:32
Отпиши потом результат , а то любопытно

Subb98
10.04.2017
20:25:52
ОК, на днях сделаю.

Google
Super
12.04.2017
05:41:23
Добрый день!Подскажите, пожалуйста, как к каждому amount прибавить сумму предыдущих.



Egor
12.04.2017
05:47:30
SQL-кодом?

Subb98
12.04.2017
06:12:19
https://www.w3schools.com/sql/sql_func_sum.asp - оно?

Super
12.04.2017
06:15:40
>.SQL-кодом? да

Egor
12.04.2017
06:22:59
это нужно сделать один раз:

?

Super
12.04.2017
06:25:29
Для каждой даты прибавить сумму предыдущих. К примеру 1434 1434 + 1435 1434 + 1435 + 1436

Egor
12.04.2017
06:27:58
я имею в виду саму операцию нужно один раз сделать над таблицей или она будет повторяться через время?

Super
12.04.2017
06:28:12
Один раз

Egor
12.04.2017
06:28:44
тогда напиши простой скрипт и всё

Super
12.04.2017
06:54:50
те это можно сделать динамически не меня дату?

Subb98
12.04.2017
06:55:51
Напиши лучше, что ты хочешь сделать. Где тебе нужны эти данные в конечном итоге, где ты будешь их использовать.

Если на веб-странице, например, то нет никакого смысла обновлять данные в самих записях, тебе нужен скрипт.

Super
12.04.2017
06:59:52
Все оказалось намного проще чем я думал SELECT *, (SELECT SUM(count) FROM tmp_res WHERE bdate <= t.bdate) FROM tmp_res as t;

Fike
12.04.2017
09:43:43
Nikolay
12.04.2017
19:21:12
select user_models.*, count(user_id) as count_messages from chat_logs left join user_models on user_models.id = user_id where chat_id = 2 group by user_id order by count_messages desc Как такое чудо можно оптимизировать? Запрос считает кол-во сообщений юзера в чате. Профайлер говорит что самая затратная операция "Copying to tmp table"

Проблема по всей видимости в count и group by



Explain запроса

Google
Yura
12.04.2017
19:26:50
Если есть возможность, то лучше такое хранить в доп колонке в юзерах, т.е. сразу аггрегированное знажение.

При росте базы все равно придется так делать.

Хотя зависит от объема

Для начала - индексы в порядке?

Fike
12.04.2017
19:28:36
джойнить-то зачем

Yura
12.04.2017
19:29:12
Видно, что тянется инфа из юзеров

Fike
12.04.2017
19:29:23
ну и здесь-то зачем ее тянуть

давайте сделаем громадную промежуточную таблицу, а потом начнем ее фильтровать и считать

Nikolay
12.04.2017
19:29:40
Для начала - индексы в порядке?
Да, с индексом стало в несколько раз быстрее, но всё ещё медленно

Yura
12.04.2017
19:29:47
Скорее всего для вывода Юзер1: 1555 Юзер2: 1200 ...

Fike
12.04.2017
19:30:04
Yura
12.04.2017
19:30:42
да серьезно что ли
Предлагай решение, а не просто критикуй

Fike
12.04.2017
19:30:51
имена трех с половиной калек легко возвращаются вторым запросом по конкретным айдишникам, не говоря уж о том, что изврат с подзапросом наверняка сделает все гораздо лучше и позволит джойнить с уже готовым результатом, а не со всей таблицей

ооо боги

кто-то еще апеллирует к сперва добейся

Nikolay
12.04.2017
19:31:10
Понятно, что лучше хранить количество сообщений в отдельном поле.

Страница 11 из 142