Обработка таблицы с большим количеством полей - PullRequest
2 голосов
/ 04 октября 2011

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

Таким образом, мой вопрос, должен ли я держать это в одном большом столе или лучше кое-что разделить как.

Я использую EF 4.0 и подключаюсь к MsSql. таблица настолько огромна, что мне нужно много прокрутить в конструкторе сущностей, чтобы увидеть все поля ...

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

Ответы [ 3 ]

3 голосов
/ 04 октября 2011

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

В целом, при хорошей системе, если в вашей таблице недостаточно строк (вероятно,> 50 000), у вас есть соответствующие индексы, и выне делают чрезмерных запросов, не должно быть большой проблемы.Если медленные запросы поднимают их голову, сверьтесь с их планом объяснения, чтобы определить, является ли проблема большой таблицей.

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

Я не использовал EF, но с JPA это может бытьособенно неприятная проблема.

2 голосов
/ 04 октября 2011

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

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

2 голосов
/ 04 октября 2011

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

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