вопрос эффективности базы данных mySQL - PullRequest
0 голосов
/ 12 февраля 2009

У меня вопрос об эффективности базы данных.

Вот некоторая информация о моем столе:

- таблица из 500-1000 записей записи добавляются и удаляются каждый день. - обычно каждый день добавляется и удаляется примерно одинаковое количество (размер активных записей остается неизменным)

Теперь у меня вопрос ... когда я удаляю записи ... я должен (A) удалить запись и переместить ее в новую таблицу?

Или, ... я должен (B) просто иметь и "активный" столбец и установить запись в 0, когда он больше не активен.

Причина, по которой я не решаюсь использовать B, заключается в том, что мой сайт основан на том, что пользователь может фильтровать / сортировать эту таблицу из 500-1000 записей на лету (используя ajax) .... поэтому мне нужно, чтобы это было как можно быстрее, .. (я предполагаю, что таблица с большим количеством записей будет медленнее фильтровать) ... и я использую MySQL InnoDB.

Любой вклад был бы отличным, Спасибо

Andrew

Ответы [ 4 ]

3 голосов
/ 12 февраля 2009

~ 1000 записей - это очень маленькое число.

Если запись может быть удалена и добавлена ​​позже, возможно, имеет смысл иметь «активный» индикатор.

1 голос
/ 12 февраля 2009

Реально, речь идет не об эффективности БД, а о задержке в сети и объеме данных, которые вы отправляете по проводам. Что касается MySQL, 1000 строк или 100 тыс. Строк будут молниеносными, так что это не проблема.

Однако, если в этих строках содержится значительный объем данных, и вы передаете все это клиенту через AJAX для фильтрации, задержка сети является вашим узким местом. Если вы передаете горстку байтов (скажем, 20) на строку и ваша таблица имеет длину около 1000 записей, это не большая проблема.

С другой стороны, если ваша таблица увеличивается (с неактивными записями), скажем, до 20 тысяч строк, теперь вы передаете 400 тысяч вместо 20 тысяч. Ваши пользователи заметят. Если записи будут больше, проблема будет увеличиваться по мере роста таблицы.

Вы действительно должны выполнить фильтрацию на стороне сервера. Пусть MySQL потратит 2 мс на фильтрацию таблицы, прежде чем потратить целую секунду или две, отправляя ее через Ajax.

0 голосов
/ 12 февраля 2009

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

Пока у вас есть первичный ключ в таблице, производительность должна быть превосходной при SELECT записи.

Кроме того, если вы выполняете фильтрацию / сортировку на стороне клиента, то записи придется получать только один раз.

0 голосов
/ 12 февраля 2009

Это зависит от того, что вы фильтруете / сортируете и как индексируется таблица.

Третий, весьма распространенный вариант, вы можете использовать гибридный подход, при котором вы деактивируете записи (B) (необязательно с отметкой времени) и периодически архивируете их в отдельную таблицу (A) (массово или на метка времени).

Реально, если ваша таблица имеет порядок 1000 строк, вероятно, не стоит слишком много суетиться над ней (при условии, что масштабируемость других факторов известна).

...