Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как уменьшить Bookmark Lookup в Execution Plan?  [new]
Dmitryp
Member

Откуда:
Сообщений: 79
Сделал запрос;
сам запрос(1%) Bookmark Lookup (99%)
Что собственно делает Bookmark Lookup и как его уменьшить?
7 авг 03, 13:15    [291839]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
неважно кто
Guest
Запрос покажите.
7 авг 03, 13:17    [291841]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
Dmitryp
Member

Откуда:
Сообщений: 79
Вот запросик
SELECT r.Key_tablog, r.tla_DurationSec,
r.Res_Destination, r.tla_DtBegin,
r.tla_Code, r.Res_Nummer,
r.Res_PriceInc, r.Res_PriceOut,
r.Res_CostInc, r.Res_CostOut,
r.Res_Rest, r.tla_TrIn, r.tla_TrOut,
r.Res_FacilInc, r.Res_FacilOut, r.Res_Region1,
r.Res_Region2, r.Res_Region3, r.Res_Region4,
r.Res_Region5, r.Res_Region6
FROM ResultatTable r with(nolock)
where r.tla_DayBegin = 37830 and r.idresultname=655 and r.Res_ClientOut=2482
and tla_DurationSec !=0

Все поля в WHERE индексированы
7 авг 03, 13:19    [291846]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
AntonGart
Member

Откуда:
Сообщений: 303
Vozmozhno delo v netochnoy statistike. I vrode eshe plotnost' raspredelenija unikalnyh znacheniy v indexe vlijaet. Pust' luchshe profi skazhut :-)
7 авг 03, 13:23    [291854]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
Glory
Member

Откуда:
Сообщений: 104760
The Bookmark Lookup logical and physical operator uses a bookmark (row ID or clustering key) to look up the corresponding row in the table or clustered index.

Т.к. в запросе выбираются и поля невходящие в индексы, по которым осуществляется поиск, то для их извлечения нужно обратится к странице данных или кластерному индексу.
7 авг 03, 13:26    [291864]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
неважно кто
Guest
Bookmark Lookup - это вытягивание данных из таблицы после определения нужной строки по индексу. Такой запрос как у вас будет исполняться либо полным сканом, либо лукапом и с ним мало что можно сделать. Можно попробовать создать составной кластерный индекс по полям из where, чтобы clustered index scan получить. Но это может повлиять на вставку записей, так что аккуратнее.
7 авг 03, 13:28    [291868]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
Dmitryp
Member

Откуда:
Сообщений: 79
Индексировать все поля? - какое-то не очень красивое решение
А есть другой выход?
7 авг 03, 13:30    [291871]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
неважно кто
Guest
Индексы покажите.
7 авг 03, 13:33    [291877]     Ответить | Цитировать Сообщить модератору
 Re: Как уменьшить Bookmark Lookup в Execution Plan?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Зачем все ? Да и не поможет это.
Почитайте лучше об организации индексов https://www.sql.ru/articles/mssql/03013101Indexes.shtml .

Можно сделать кластерный индекс tla_DayBegin +idresultname+ Res_ClientOut+
tla_DurationSec
7 авг 03, 13:33    [291879]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить