Как структурировать большую таблицу и ее транзакции в базе данных?

0

Например, у меня есть две большие таблицы:

'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 или что-то подобное и структурируете свою базу данных, как то, что я сделал?

  • 0
    Недостаточно информации. Давайте посмотрим на «медленные» запросы выбора. И давайте посмотрим SHOW CREATE TABLE . Это может быть проблема с индексацией, это может быть ...
Теги:
database
mariadb

1 ответ

0

Ваша установка неправильная.

Вы не должны дублировать столбцы из tbl_items в tbl_items_transactions, скорее, вы должны иметь внешний ключ в последней таблице, указывающий на первый.

Таким образом, целостность данных сохраняется, а tbl_items_transactions будет намного меньше. Этот метод называется нормировкой.

Чтобы ускорить запросы, когда таблица становится большой, определите индексы для них, которые соответствуют условиям WHERE и JOIN.

  • 0
    Спасибо Лоренц Альбе, но все столбцы представлены в виде простого текста и имеют разные значения и разные вещи, и у нас нет дублирующих значений в каждом столбце. поэтому я не могу разделить свою таблицу на другие таблицы и нормализовать ее :(
  • 0
    и я хочу сохранить историю данных tbl_items в другой таблице, которая называется tbl_items_transactions чтобы пользователи могли видеть значение каждого столбца в разные интервалы даты и времени, например, пользователь изменяет значение столбца, но менеджер проверяет его и видит, что значение неверно и хочет увидеть, что было значение столбца, прежде чем пользователь изменил его
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню