Как спроектировать эту базу данных? - PullRequest
0 голосов
/ 17 июля 2009

Мне нужно спроектировать базу данных для хранения данных журнала, но у меня нет опыта раньше. Моя таблица содержит около 19 столбцов (около 500 байтов в каждой строке), и ежедневно увеличивается до 30 000 новых строк. Мое приложение должно иметь возможность снова эффективно запрашивать эту таблицу.

Я использую SQL Server 2005.

Как я могу создать эту базу данных?

EDIT: данные, которые я хочу сохранить, содержат много типов: datetime, string, short и int. Ячейки NULL составляют около 25%:)

Ответы [ 5 ]

1 голос
/ 17 июля 2009

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

Вам также понадобятся индексы для полей, по которым вы будете запрашивать чаще всего, но не прыгайте здесь. Вы можете добавить индексы позже. Профиль сначала, чтобы вы знали, какие индексы вам действительно нужны. На столе с большим количеством вставок нежелательные индексы могут ухудшить вашу производительность.

0 голосов
/ 17 июля 2009

Некоторые оптимизации, которые вы могли бы сделать:

  1. Кластеризация данных на основе наиболее вероятных критериев поиска (например, кластеризованный первичный ключ на дату и время создания каждой строки сделает поиск такого типа очень быстрым).
  2. Предполагая, что строки пишутся по одной (не в пакетном режиме), и что каждая строка вставляется, но никогда не обновляется, вы можете закодировать все операторы select, чтобы использовать параметр «with (NOLOCK)». Это обеспечит значительное улучшение производительности, если у вас много читателей, поскольку вы полностью обходите систему блокировки. Риск чтения неверных данных значительно снижается с учетом структуры таблицы.

Если вы сможете опубликовать определение таблицы, я могу предложить больше советов.

0 голосов
/ 17 июля 2009

Добавьте индекс в каждый столбец, к которому вы будете обращаться.

Огромное количество тестовых данных и планов выполнения (с анализатором запросов) - ваши друзья здесь.

0 голосов
/ 17 июля 2009

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

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

0 голосов
/ 17 июля 2009

Что ж, учитывая описание, которое вы предоставили, все, что вы действительно можете сделать, это убедиться, что ваши данные нормализованы и что ваши 19 столбцов не приводят вас к «разреженной» таблице (то есть, что большое количество этих столбцов нуль).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...