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

Откуда: Київ
Сообщений: 10428
В запросе основной % на двух RID Lookup-ах, подскажите как избавиться от них, может полегчает

		SELECT top (10) OP.hier.ToString() + CAST(LP.int_id AS VARCHAR(30) ) + '/'  hier, LP.int_id  
		 FROM nodes_ex5 LP
		 INNER JOIN nodes_ex5 OP 
		 ON ( LP.int_parent_id = OP.int_id 
		 AND OP._level IS NOT NULL 
		 AND LP._level IS NULL 
		 )


Есть отдельные индексы по

[int_id]
_level
parent_id

Еще построил индекс

CREATE NONCLUSTERED INDEX [IX_nodes_ex5_int_id_hier] ON [dbo].[nodes_ex5] ([int_id]) include (hier)

не помогло
Что еще сделать можно?


План аттачнул...

К сообщению приложен файл (RID_Lookup.sqlplan - 68Kb) cкачать
8 июл 13, 18:37    [14538082]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от RID Lookup (Heap)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Для вашего запроса нужен еще вот такой индекс:

CREATE NONCLUSTERED INDEX [IX_nodes_ex5_covering] ON [dbo].[nodes_ex5] ( 
  _level
  , int_parent_id 
) include (int_id, hier)


Сообщение было отредактировано: 8 июл 13, 19:10
8 июл 13, 19:05    [14538213]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от RID Lookup (Heap)  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Гавриленко Сергей Алексеевич
Для вашего запроса нужен еще вот такой индекс:

CREATE NONCLUSTERED INDEX [IX_nodes_ex5_covering] ON [dbo].[nodes_ex5] ( 
  _level
  , int_parent_id 
) include (int_id, hier)


спасибо.

Но я так понимаю надо убрать одиночный индекс по _level, похоже он может сбивать с толку?
8 июл 13, 19:17    [14538239]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от RID Lookup (Heap)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
На самом деле надо два вот таких индекса:

-- LP
CREATE NONCLUSTERED INDEX [IX_nodes_ex5_level_int_parent_id] ON [dbo].[nodes_ex5] ( 
  _level
  , int_parent_id 
) include ( int_id, hier )

-- OP
CREATE NONCLUSTERED INDEX [IX_nodes_ex5_level_int_id] ON [dbo].[nodes_ex5] ( 
  _level
  , int_id
) include ( hier )


Сообщение было отредактировано: 8 июл 13, 19:22
8 июл 13, 19:22    [14538253]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от RID Lookup (Heap)  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Winnipuh,

Еще у вас статистика совсем кривая, ожидается 3 строки вместо 108 тысяч реальных. Попробуйте обновить статистику с FULLSCAN хотя бы на индексах по _level.
8 июл 13, 20:17    [14538395]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от RID Lookup (Heap)  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
чтение летает, спасибо....
иду дальше:

Делаю для теста селект:

select  P2.hier
		FROM nodes_ex5 LP2
		INNER JOIN (
		 SELECT OP.hier.ToString() + CAST(LP.int_id AS VARCHAR(30) ) + '/'  hier, LP.int_id  
		 FROM nodes_ex5 LP
		 INNER JOIN nodes_ex5 OP 
		 ON ( LP.int_parent_id = OP.int_id 
		 AND OP._level IS NOT NULL 
		 AND LP._level IS NULL 
		 and LP.int_parent_id IS NOT NULL)
		) P2 
		ON (LP2.int_id = P2.int_id )


2-3 минуты выбирает 2 млн записей.
В принципе неплохо.
Потом делаю апдетй, из-за которого все это затевалось и который базируется на селекте выше:


UPDATE LP2 SET hier = P2.hier
		FROM nodes_ex5 LP2
		INNER JOIN (
		 SELECT OP.hier.ToString() + CAST(LP.int_id AS VARCHAR(30) ) + '/'  hier, LP.int_id  
		 FROM nodes_ex5 LP
		 INNER JOIN nodes_ex5 OP 
		 ON ( LP.int_parent_id = OP.int_id 
		 AND OP._level IS NOT NULL 
		 AND LP._level IS NULL 
		 and LP.int_parent_id IS NOT NULL)
		) P2 
		ON (LP2.int_id = P2.int_id )



торчит немерено ....
9 июл 13, 12:38    [14540449]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться от RID Lookup (Heap)  [new]
мимо
Guest
Winnipuh,
Надо выбрать во временную таблицу (2 млн. - небольшой объём) и апдейтить из неё. Индексы - по вкусу.
9 июл 13, 17:13    [14542698]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить