2012-07-24 2 views
2

У меня есть выбор для создания трех таблиц с одинаковой структурой, но с другим содержимым или с одной таблицей со всеми данными и еще одним столбцом, который отличает данные. Каждая таблица будет содержать около 10 000 строк, и она будет использоваться исключительно для поиска данных. Ключевыми критериями проектирования является скорость поиска, поэтому это быстрее: три таблицы с 10 тыс. Строк каждая или одна таблица с 30 тыс. Строк или нет существенных различий? Примечание. Все столбцы, которые будут использоваться в качестве параметров запроса, будут иметь индексы.Три таблицы SQL или один?

+1

Больше информации было бы полезно, но звучит для меня, если у вас есть три разных типа данных, а затем три разных таблицы. – Marvo

+0

Все столбцы в каждом из трех источников данных идентичны –

+0

Вы можете найти * PARTITIONING * полезную концепцию, если ваша БД поддерживает ее (например, Postgres). Похоже, это может быть ваша ситуация. –

ответ

3

Не должно быть существенной разницы между рядами 10k или 30k в любой современной СУБД с точки зрения времени поиска. В любом случае недостаточно разницы, чтобы оправдать де-нормализацию. Обозначенный столбец классификатора является общим подходом для такой конструкции.

Единственный раз, когда вы можете рассмотреть возможность отмены нормализации, если ваш шаблон обновления влияет на ограниченный набор данных, которые вы можете поместить в «короткую» таблицу (например, сегодняшние сообщения в социальной сети) с небольшими (er) индексами для быстрого вставки/обновления и фоновый процесс, переносящий стабилизированные обновления в большую, полностью проиндексированную таблицу. Дело в том, что вы действительно выиграли во время операций записи будет драматичным, хотя и с очень конкретными и неудачными требованиями. Двигатели СУБД достаточно сложны, чтобы эффективно обрабатывать большинство простых сценариев. 30k или строки не похожи на кандидата.

Если вы все еще сомневаетесь, очень легко написать тест для проверки конкретной настройки базы данных/системы. Я думаю, что если вы разместите свои данные здесь с реальными данными, это будет полезной информацией для всех на ваших шагах.

+0

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

+0

Таблицы еще не существуют, но как только они это сделают, я проведу несколько тестов, как вы предлагаете ... и опубликуйте результаты. –

1

Помимо вопроса о скорости, с которым другие плакаты покрывают, и я согласен с вами, вы должны также учитывать бизнес-модель, которую вы реплицируете в своей базе данных, поскольку это может повлиять на стоимость обслуживания вашего решения.

Если возможно, что 3 'вещи' могут превратиться в 4, и вы выбрали отдельный путь к таблице, тогда вам придется добавить другую таблицу. Если вы выбираете путь дискриминатора, то это так же просто, как придумать новый дискриминатор.

Однако, если вы выберете путь дискриминатора, а затем новые требования диктуют, что у одной из «вещей» есть больше данных для хранения, вам придется добавить дополнительные столбцы в таблицу, которые не имеют отношения к другим вещам ».

Я не могу сказать, какой правильный путь, так как только вы знаете свою бизнес-модель.

Смежные вопросы