Например, у меня есть две большие таблицы:
'tbl_items' и 'tbl_items_transactions'
Первая таблица содержит некоторые метаданные элементов, которые могут содержать 20 (varchar) столбцов с миллионами строк... и вторую таблицу, сохраняющую каждую транзакцию первой таблицы.
например, если пользователь вставляет новую запись в tbl_items
то автоматически новая запись будет добавлять к tbl_items_transactions
с теми же данными плюс date
, username
и transaction type
чтобы сохранить каждую историю строк.
поэтому в приведенном выше сценарии две таблицы имеют одинаковые столбцы, но tbl_items_transactions
имеют 3 дополнительных столбца date
, username
, transaction_type
чтобы сохранить каждую историю tbl_items
теперь предположим, что у нас есть 1000 пользователей, которые хотят tbl_items
, tbl_items
, удалять записи tbl_items
с помощью веб-приложения. поэтому эти две таблицы масштабируются очень скоро (возможно, миллиард строк в tbl_items_transactions
)
Я пробовал MySQL, MariaDB, PostgreSQL... они очень хороши, но когда таблица и миллионы строк вставлены, они медленны при запуске некоторых запросов на tbl_items_transactions
... но иногда PostgreSQL быстрее MySQL или MariaDB
теперь я думаю, что я делаю неправильные вещи... Если бы вы были мной... вы используете MariaDB или PostgreSQL или что-то подобное и структурируете свою базу данных, как то, что я сделал?
Ваша установка неправильная.
Вы не должны дублировать столбцы из tbl_items
в tbl_items_transactions
, скорее, вы должны иметь внешний ключ в последней таблице, указывающий на первый.
Таким образом, целостность данных сохраняется, а tbl_items_transactions
будет намного меньше. Этот метод называется нормировкой.
Чтобы ускорить запросы, когда таблица становится большой, определите индексы для них, которые соответствуют условиям WHERE
и JOIN
.
tbl_items
в другой таблице, которая называется tbl_items_transactions
чтобы пользователи могли видеть значение каждого столбца в разные интервалы даты и времени, например, пользователь изменяет значение столбца, но менеджер проверяет его и видит, что значение неверно и хочет увидеть, что было значение столбца, прежде чем пользователь изменил его
SHOW CREATE TABLE
. Это может быть проблема с индексацией, это может быть ...