SQL: Выбор из нескольких таблиц в одном запросе или запрос для каждой таблицы? - PullRequest
0 голосов
/ 06 марта 2011

Следующий вопрос, касающийся части слоя DAL. Первый вопрос о работе с большими объектами

У меня есть одна таблица (PlacesTable), которая связана, как и 6 других таблиц (1: многие и многие: многие отношения)

В моем DAL я должен поместить большой запрос, объединяющий 6 таблиц + справочные таблицы m: m (кстати, он выдает несколько данных, которые мне не нужны Пожалуйста, обратитесь к моему старому вопросу ) и поместите все данные в определенное свойство объекта или, если я использую один запрос для каждой таблицы, создайте объект для каждой выбранной таблицы ... и, наконец, отправьте их в пользовательский интерфейс?

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

Заранее спасибо за ваше время и помощь =)

Ответы [ 4 ]

2 голосов
/ 06 марта 2011

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

  • Использование сохраненного процесса для возврата 6 наборов записей за один вызов БД
  • Выполните несколько объединений на сервере, чтобы уменьшить количество дублирующихся данных и количество обращений
    • сделать оба

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

1 голос
/ 06 марта 2011

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

Загружайте только те данные, которые вам необходимы.Рассмотрим вашего потребителя (в данном случае, пользовательский интерфейс).Вам нужно отобразить эти данные?Запросите только те данные, которые вам нужны.Создайте несколько методов в вашем DAL, чтобы гарантировать, что нужные данные загружены в то времято есть GetPlacesSummary() возвращает данные в одном виде, а GetDetailedPlaces() возвращает более детальный набор данных.

Просмотрите компонент доступа к данным, который поддерживает отложенную загрузку .Это означает, что только при доступе к этим свойствам (например, Customer.Invoices.Count) данные будут фактически запрашиваться из базы данных.

0 голосов
/ 06 марта 2011

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

0 голосов
/ 06 марта 2011

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

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

Самым медленным процессом между приложением и сервером SQL является установление соединений: чем меньше их, тем лучше.

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