Какой вариант запроса оптимальнее и быстрее

1. KlesAlex 3 13.07.18 12:08 Сейчас в теме
Есть Иерархический справочник. До пустим называется Объекты. Уровень иерархии максимальный 6.

Нужно получить элемент и всех его родителей запрос.

Что оптимальнее, правильнее, быстрее

Вариант 1:

ВЫБРАТЬ
         Спр.Ссылка КАК Объект,
         Спр.Родитель КАК Родитель1.
         Спр.Родитель.Родитель КАК Родитель2,
         Спр.Родитель.Родитель.Родитель КАК Родитель3,
         Спр.Родитель.Родитель.Родитель.Родитель КАК Родитель4,
         Спр.Родитель.Родитель.Родитель.Родитель.Родитель КАК Родитель5,
         Спр.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель КАК Родитель6
ИЗ
         Справочник.Объекты КАК Спр
Показать


Вариант 2:

ВЫБРАТЬ
	Спр1.Ссылка КАК Объект,
	Спр1.Родитель КАК Родитель1,
	Спр2.Родитель КАК Родитель2,
	Спр3.Родитель КАК Родитель3,
	Спр4.Родитель КАК Родитель4,
	Спр5.Родитель КАК Родитель5,
	Спр6.Родитель КАК Родитель6
ИЗ
	Справочник.Объекты КАК Спр1
	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Спр2
	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Спр3
	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Спр4
	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Спр5
	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Спр6
	ПО Спр5.Родитель = Спр6.Ссылка
	ПО Спр4.Родитель = Спр5.Ссылка
	ПО Спр3.Родитель = Спр4.Ссылка
	ПО Спр2.Родитель = Спр3.Ссылка
	ПО Спр1.Родитель = Спр2.Ссылка
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. qazaas 13.07.18 12:33 Сейчас в теме
(1) Ради интереса протестировал.

На малых объемах, они одинаковы, а в больших базах лучше использовать первый запрос.

Update: Извиняюсь, не туда посмотрел - второй запрос быстрее отрабатывает!!!
5. Sashares 34 13.07.18 12:34 Сейчас в теме
(1)Выборку по иерархии не предлагать?

ВЫБРАТЬ
 Спр.Ссылка
ИЗ
    Справочник.Объекты КАК Спр
ИТОГИ ПО
Ссылка ИЕРАРХИЯ
6. KlesAlex 3 13.07.18 12:40 Сейчас в теме
(5) нет. нужна именно таблица для дальнейшего использования.
2. Timur.V 78 13.07.18 12:11 Сейчас в теме
Удобно смотреть, если база клиент-серверная т.е. есть ms sql
Запускаете запрос на тестовом сервере и смотрите план запроса.
3. herfis 500 13.07.18 12:23 Сейчас в теме
Декларативно они одинаковы. Первый - короче и нагляднее. Поэтому я бы использовал его и напрягался только при возникновении конкретных проблем производительности.
ДАЖЕ если сей момент профайлер покажет, что в первом случае построился менее оптимальный план выполнения, это вовсе не означает что так будет при других входных условиях, другом состоянии базы или после очередного патча/новой версии SQL-сервера.
user774630; Leon75; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот