Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
SELECT 
num_owner_name =
    (   SELECT subj_brief_name
        FROM subjects
        WHERE subj_id = a.tab_owner
    ),
num_ww_name =
    (   SELECT subj_brief_name
        FROM subjects
        WHERE subj_id = p.num_ww
    )
FROM dbo.num p   
        LEFT JOIN dbo.tab_history ah
        ON p.num_contract_id = ah.num_contract_id
        
        LEFT JOIN dbo.tabs a
        ON ah.tab_id = a.tab_id

Можно ли написать запрос так, чтобы обращение к таблице subjects было один раз? Она большого размера.
2 авг 12, 12:00    [12951268]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
Читатель неместный
Guest
при наличии индекса
create unique index i_subjects_subj_id on subjects (subj_id) include (subj_brief_name)
или ему подобного, размер таблицы не имеет значения
2 авг 12, 12:07    [12951346]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Читатель неместный,

subjects (subj_id) это кластерный индекс. Включеные столбцы не могут быть.
На поле subj_brief_name некластерный индекс есть.

Сам запрос не понравился, обращение два раза к таблице.
2 авг 12, 12:11    [12951403]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
Glory
Member

Откуда:
Сообщений: 104751
trew
Сам запрос не понравился, обращение два раза к таблице.

Ну так там же разные значения ищутся.
Как вы себе представляете одновременное обращение по a.tab_owner и по p.num_ww ?
2 авг 12, 12:17    [12951457]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Glory,

Може CTE или PIVOT. Это мои фантазии.
2 авг 12, 12:21    [12951489]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
Glory
Member

Откуда:
Сообщений: 104751
trew
Може CTE или PIVOT. Это мои фантазии.

Вы "джойните" subjects и к dbo.num и к dbo.tabs
А результат этих джойнов еще между собой джойните
2 авг 12, 12:24    [12951522]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
Читатель неместный
Guest
trew
Читатель неместный,

subjects (subj_id) это кластерный индекс. Включеные столбцы не могут быть.
На поле subj_brief_name некластерный индекс есть.

Сам запрос не понравился, обращение два раза к таблице.


У Вас замечательный запрос
Все равно создайте индекс
...если конешно в табличке есть ещё что то кроме этих двух полей
2 авг 12, 12:24    [12951527]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
как минимум в left join переделайте ваши подзапросы, не оставляйте это "оптимизатору" и судя по операторам ниже - он вам знаком, тогда будет вполне приемлимый запрос.
2 авг 12, 12:29    [12951566]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
trew
Glory,

Може CTE или PIVOT. Это мои фантазии.


это сделать можно, но не надо.
Так же можно сделать group by и т. п.

Лучше два джойна для нужных данных, чем по факту возможно группировать кучу лишних данных.
2 авг 12, 12:34    [12951622]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
NIIIK
как минимум в left join переделайте ваши подзапросы, не оставляйте это "оптимизатору" и судя по операторам ниже - он вам знаком, тогда будет вполне приемлимый запрос.


Можно ссылку почитать, что такая форма записи плоха? Чтобы обосновывать точку зрения в спорах :)
2 авг 12, 12:41    [12951690]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
trew,

не можно,
это было-код и индусский код. Всё равно что получаеть значения колонок функциями. Не всегда оптимизатор раскроет правильно, особенно если потом "код разрастётся".
В случае если выбрать надо будет более одной колонки - два подзапроса запроса в "такой форме записи"

Мне, на основе моего опыта, не нужна никакая ссылка с лишней демогогией что так делать "не надо". А тут ещё "мало ли кто потом будет читать и в дайльнейшем переписывать" или мало ли кому-то приджойнится надо будет к этому полю. Я такое встречал в "китайском коде" - полный пипец и опа.
2 авг 12, 13:00    [12951889]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (обращение к таблице два раза) ms sql 2005  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
NIIIK,
мало ли кому-то приджойнится надо будет к этому полю(таблице)

Вот и аргумент.

Всем спасибо.
2 авг 12, 13:12    [12952034]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить