Какой подход лучше извлечь данные из базы данных - PullRequest
3 голосов
/ 21 мая 2011

Я запутался в выборе двух подходов.

Сценарий
есть две таблицы Table 1 и Table 2 соответственно.Table 1 содержит данные пользователя, например, имя, фамилию и т. Д.

Table 2 содержит автомобили, которые есть у каждого пользователя с описанием.то есть Color, Registration No и т. д.

Теперь, если я хочу получить всю информацию всех пользователей, какой подход лучше всего выполнить за минимальное время?

Подход 1.

Запросить все строки в Table 1 и сохранить их все в списке, например,

, затем перебрать список и запросить его и получить данные из Table 2 в соответствии спользователю, сохраненному на первом шаге.

Подход 2

Запрос для всех строк и при сохранении этой строки получить все значения из table 2 и сохранить их тоже.

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

Если есть какая-то другая лучшая идея, пожалуйста, дайте мнезнать

1 Ответ

6 голосов
/ 21 мая 2011

Ваши два подхода будут иметь примерно одинаковую производительность (медленная из-за N + 1 запросов). Было бы быстрее сделать один запрос, подобный этому:

select *
from T1
left join T2 on ...
order by T1.PrimaryKey

Ваше клиентское приложение может интерпретировать результаты и иметь все данные в одном запросе. Альтернативой будет:

select *, 1 as Tag
from T1
union all
select *, 2 as Tag
from T2
order by T1.PrimaryKey, Tag

Это просто псевдокод, но вы можете заставить его работать.

Запрос union-all будет иметь удивительно хорошую производительность, потому что сервер sql выполнит «объединение слиянием», которое работает как merge-join. Этот шаблон также работает для многоуровневых родительско-дочерних отношений, хотя и не так хорошо.

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