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

Откуда:
Сообщений: 257
Добрый день.

Читал одну статью, вот пример их запроса

create table TestTable 
(id int identity(1,1),
Salary money,
constraint chkSalary check (salary > 1000)
)
go

Insert into TestTable values (2000),
(1500),
(3000)
go

select * from TestTable where Salary < 800 option(recompile)

Если is_not_trusted = 0
select name,object_name(parent_object_id) tabela,is_not_trusted
from sys.check_constraints where object_name(parent_object_id) = 'TestTable'

то, в плане запроса получаем ConstantScan, убрав recompile получаем table scan, если trusted отключаем, то получаем в двух случаях table scan

Собственно вопрос, в каких случаях я должен отключать trusted, стоит ли вообще это делать, и правильно ли я понял, что ConstantScan дороже чем tableScan

Или киньте плиз ссылки, где про это можно почитать.

Сообщение было отредактировано: 31 янв 16, 15:09
31 янв 16, 13:33    [18752231]     Ответить | Цитировать Сообщить модератору
 Re: check constraint  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
user87
и правильно ли я понял, что ConstantScan дороже чем tableScan
Если включить банальную логику: если бы ConstantScan был всегда дороже, то зачем бы он был нужен?

Сообщение было отредактировано: 31 янв 16, 15:11
31 янв 16, 15:10    [18752454]     Ответить | Цитировать Сообщить модератору
 Re: check constraint  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
user87
Собственно вопрос, в каких случаях я должен отключать trusted
Ни в каких.
Trusted constraint позволяет оптимизатору еще при компиляции узнать, что запрос вернет пустой набор.

В вашем примере это происходит с запросом, у которого option(recompile) - оптимизатор знает, что в таблице не может быть записей с Salary < 800 и исключает из плана выполнения Table Scan, заменив его на Constant Scan.

Без option(recompile) запрос автопараметризуется. И, хотя, значение параметра при компиляции известно, оптимизатор не может исключить сканирование таблицы как в предыдущем случае, т.к. обязан построить план, которые будет возвращать корректный результат при любом значении параметра.
31 янв 16, 15:52    [18752521]     Ответить | Цитировать Сообщить модератору
 Re: check constraint  [new]
user87
Member

Откуда:
Сообщений: 257
Спасибо за ответы!)
31 янв 16, 16:05    [18752557]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить