Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 UPDATE with forceseek  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Доброго времени суток!

СУБД: MS SQL 2014 SP2 Enterprise Edition

Есть ли возможность заставить оптимизатор при обновлении одной записи в таблице всегда делать поиск по индексу(индекс есть по полю условия where) вне зависимости от того сколько строк в таблице.

Проблема в том что есть таблица(куча) у которой много ghost record и в случае когда оптимизатор принимает решение о сканировании индекса то запрос выполняется долго.

К сожалению Hint forceseek не подходит для update\insert\delete. Как и USE PLAN N'xml_plan'

Перестроить\Truncacate таблицы не предлагать :)
14 окт 16, 11:54    [19781027]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE with forceseek  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
andrew shalaev
К сожалению Hint forceseek не подходит для update\insert\delete

По каким причинам не подходит?

А вообще, секционирование и обработка по чекпоинтам, да.

Сообщение было отредактировано: 14 окт 16, 12:01
14 окт 16, 12:01    [19781061]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE with forceseek  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гавриленко Сергей Алексеевич
По каким причинам не подходит?


The FORCESEEK hint is not allowed for target tables of INSERT, UPDATE, or DELETE statements.
14 окт 16, 12:08    [19781085]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE with forceseek  [new]
msLex
Member

Откуда:
Сообщений: 9280
andrew shalaev
Гавриленко Сергей Алексеевич
По каким причинам не подходит?


The FORCESEEK hint is not allowed for target tables of INSERT, UPDATE, or DELETE statements.

create table #t(id int not null, f int)
create unique clustered index ixuc__id on #t(id)

insert #t (
	id
) 
select top 100 
	ROW_NUMBER() over(order by (select null))
from sys.objects

update t set 
	t.f = 2
from #t t with(forceseek)
where 
	t.id = 10
14 окт 16, 12:24    [19781155]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE with forceseek  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
andrew shalaev
Гавриленко Сергей Алексеевич
По каким причинам не подходит?


The FORCESEEK hint is not allowed for target tables of INSERT, UPDATE, or DELETE statements.
В секции from любые хинты писать можно, как уже msLex показал.
14 окт 16, 12:42    [19781236]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE with forceseek  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
msLex, Гавриленко Сергей Алексеевич спасибо!
14 окт 16, 13:49    [19781654]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE with forceseek  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
andrew shalaev,

https://connect.microsoft.com/SQLServer/feedbackdetail/view/825152/error-10724-the-forceseek-hint-is-not-allowed-for-target-tables-of-insert-update-or-delete-statements-is-not-correct-for-delete-update-or-not-documented-correctly

вот здесь описано что вы делали не так
14 окт 16, 14:11    [19781763]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить