2010-08-31 4 views
4

На данный момент я нахожусь в оптимизации.mysql пустые столбцы

Я имею тенденцию использовать несколько таблиц, поэтому у меня нет пустых столбцов.

Мой вопрос: есть ли пустые столбцы? Я не говорю о космосе. Я имею в виду скорость индексирования, поиск данных и т. Д.

Мой пример ставки, когда у меня есть простая таблица клиентов, а некоторые столбцы не всегда заполняются. Как электронная почта, dob, ssn или pic. Я бы сказал, что большую часть времени они не заполняются.

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

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

ответ

1

Если вы на оптимизации удар, мой совет, чтобы получить от него :-)

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

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

И скорость индексации не изменится только потому, что столбец хранится в другой таблице. Если его нужно индексировать, то его нужно индексировать.

Я предпочитаю, чтобы моя схема была как можно более простой (хотя в основном в основном после 3NF), чтобы избежать ненужных объединений.

1

Если вы храните их как поле переменной длины (например: VARCHAR), пустые столбцы не занимают столько места (любого?). Это происходит за счет более медленного поиска по сравнению с таблицами, которые только имеют поля фиксированной длины.

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

Что вы могли бы сделать в своей таблице customers, так это иметь одну дополнительную таблицу customer_profiles с соотношением 1: 1 с таблицей customers. Храните необходимую информацию в customers, а остальные (то есть: вещи вам не нужны каждый раз, когда вы смотрите на клиента) в таблице customer_profiles.

1

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

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

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

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

Реляционная модель обычно позволяет использовать более одного метода для реализации модели ER, и это именно то, что ее иллюстрирует.

Вы можете прочитать эту статью:

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