У меня есть две таблицы, которые в большой степени опрошены несколькими пользователями. Для этих таблиц создаются средние запросы на 100+ (обновление/выбор)/вторых запросов.SQL Update Query with from clause Оптимизация
Родитель Детский
* GrantParent не участвует в присоединиться к так, я сказал только два стола
Мне нужно, чтобы изменить порядок всех детей для каждого родителя. Там может быть 3000-4000 родителей, и каждый родитель может иметь примерно столько же детей.
Типы столбцов: ParentID GUID ChildIndex INT FILEID Varchar IsDeleted бит
Таблицы группировались индекс на ПК и не кластерный индекс по столбцам используется в том, где.
UPDATE C SET C.ChildIndex = T.ReOrderedChildIndex FROM [Child] C INNER JOIN
(
SELECT ROW_NUMBER() OVER (PARTITION BY dbo.Child.[ParentID] ORDER BY [ChildIndex] asc) AS ReOrderedChildIndex,
dbo.Child.ChildIndex,
dbo.Child.FileID,
dbo.Child.ParentID
FROM dbo.Child WITH (NOLOCK) INNER JOIN
dbo.Parent WITH (NOLOCK) ON dbo.Child.ParentID = dbo.Parent.ParentID
WHERE (dbo.Parent.GrandParentID = 1) AND (dbo.Child.IsDeleted = 0)
) T
ON C.FileID =T.FileID AND (C.ParentID=T.ParentID) AND (C.IsDeleted = 0)
Это выглядит выше запрос займет больше времени и поставить запросы на выборку на ожидании, даже я использовал WITH (NOLOCK) во всех хранимых процедурах отбора данных.
Существует еще один запрос, который переупорядочивает родителей так же, как и для дочерних элементов в вышеуказанном запросе.
В действии Монитор блокировки показаны для выбора хранимых процедур.
Каков наилучший способ изменить порядок выполнения переупорядочения?
У меня возникли следующие проблемы и считаю, что они являются следствием этих запросов: 1- Случайно происходит взаимоблокировка. 2 Часто бывает время пула подключения.
* База данные доступны по окну приложения с использованием EntLib 4.0 с пулом подключений включены, бассейн максимального размером 200.
SQL Server 2008 R2
Nolock не будет работать в запросе на изменение данных, вставить, обновить, удалить или слить. – jtimperley
Вы разрешаете только один уровень отношений между родителем и ребенком? Родитель-> Ребенок или Родитель-> Ребенок1-> Ребенок2-> Ребенок3? – jtimperley
Существует только один уровень. Ребенок может быть только ребенком, а родитель может быть только родителем, поэтому нет рекурсии или самостоятельного объединения. Все родители уникальны для одного бабушки и дедушки, и все дети уникальны для каждого родителя. Что касается Nolock в обновлении .. Я думал, что обновление имеет вложенный выбор, поэтому nolock следует рассматривать для выбора? – Munawar