У меня есть таблица, в которой три строки данных добавляются в секунду и в которых я намерен хранить около 30M строк. (Старые данные будут удалены).Должен ли я использовать отдельную таблицу для повторяющихся значений (varchar)?
Мне нужно добавить столбец: varchar (1000). Я не могу заранее сказать, что это будет, но я знаю, что он будет очень повторяющимся: тысячи-миллионы строк будут иметь одинаковое значение. Это обычно около 200 символов.
Поскольку данные добавляются с помощью хранимой процедуры я вижу две опции
- Добавить столбец VARCHAR (1000)
- Создать таблицу (интермедиат идентификатор, VARCHAR 1000) значение() В StoredProcedure , посмотрите, существует ли значение в этой другой таблице или создайте его. Я бы ожидал, что эта другая таблица будет иметь максимум 100 значений за все время.
Я знаю некоторые из компромиссов между этими двумя вариантами, но мне трудно решить вопрос.
Вариант 1 тяжелее, но я получаю более быстрые вставки. Требуется меньше соединений, поэтому запрос проще. Вариант 2 - более легкая вставка, занимающая больше времени, но запрос может быть быстрее. Я думаю, что я ближе к нормальной форме, но тогда у меня также есть таблица с одним значимым столбцом.
Из информации, которую я вам дал, какой вариант кажется лучше? (Вы также можете выбрать другой вариант).
В этом новом столбце будет много значений NULL? Вам нужно будет искать большую таблицу на основе содержимого этого столбца? Кроме того, сколько символов уже есть в таблице? – Sparky
Укажите, какую версию Microsoft SQL (предполагается тэгом tSQL) вы используете? – Sparky
Я ожидаю около 20% значений NULL. Мне может потребоваться выполнить поиск по содержимому этого столбца, но большая часть времени будет уменьшена примерно до 100 тыс. Строк индексированным столбцом. Около 200 символов для каждой записи. – Benoittr