Как создать partition в MySQL для существующей таблицы?
Есть таблица с чуть более чем 10 млн записей, как в такой таблице для оптимизации создать партации по полям, которые наиболее часто используются в выборке?
Собственно в amount записывается общая сумма операции, а в principal_bought сумма траты в системе, principal_sold сумма заработка в системе (специфика приложения).
Чтобы посчитать баланс клиента нужно сделать SELECT SUM(principal_sold+principal_bought) FROM table WHERE client_id=1
Клиентов в системе десятки тысяч, количество операций с каждым днем растет, а общий баланс считается за весьб период.
Идея - разделить таблицу на партации по диапазону клиентов чтобы ускорить подсчет баланса клиента.
Иван, несмотря на то, что все операции интсерятся внутри транзакции, такое поле есть, но баланс там частенько не сходится с реальностью.
Есть еще предположение сделать структуру таблицы Opening / Closing balance - т.е считать закрытие банковского дня и сохранять баланс так, а все сегодняшние операции производить с рачетом "сумма закрытия дня" минус все операции после.
Иван, Не сходится видимо потому, что где-то поле меняется а транзакция отваливается из-за, например, deadlock но я пока не могу отследить где это происходит в приложении или на уровне базы.
Или я невнимантельно читал или везде партации создаются вместе с созданием таблицы? Т.е на существуюющую навесить нельзя?
А как добавлять партации? Например, я хочу разбить на части по client_id от 0 до 1000 от 1001 до 2000 от 2001 до 3000 и так далее, скажем до 100 000 клиента, а через год-два будет у меня клиент 100 001 и что потом? Или делать партации по ID по хэшу и указывать толоько количество частей?