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

Откуда:
Сообщений: 233
По мотивам статьи DeColo®es
В таблице есть столбец ID int c первичным ключом и кластерным индексом на нем.
В базу сыплется туча запросов с клиентского приложения вида
select ... from Table where ID in (N'1', N'2',  ... , N'1000')

план запросов идентичен запросу
select ... from Table where ID in (1, 2,  ... , 1000)

|--Clustered Index Seek(OBJECT:([test].[dbo].[Table].[PK_table_ID]), SEEK:([test].[dbo].[Table].[ID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD)
меня это смутило сначала, но, видимо, зря, потому что 1, 2, 3 .. интерпретируются как smallint
индекс в обоих случаях используется
НО
если сделать
declare @i int = 1
select ... from Table where ID in (@i)

то план запроса будет без CONVERT_IMPLICIT
|--Clustered Index Seek(OBJECT:([test].[dbo].[Table].[PK_table_ID]), SEEK:([test].[dbo].[Table].[ID]=[@i]) ORDERED FORWARD)
мерял время, логические чтения - разницы нет

Вопрос: стоит ли как-то заморачиваться в данном случае с типами и их приведением? Как оценить возможный выигрыш? Или удовлетвориться тем, что индекс все-таки так и так используется во всех случаях?

+ @@version
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
11 апр 12, 10:47    [12397536]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
aleks2
Guest
1. Настоящий джедай пишет так
select ... from Table where ID in (cast(1 as int), cast(2 as int),  ... , cast(1000 as int))


2. Но абсолютную гарантию дает только страховой полис.
11 апр 12, 11:08    [12397718]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Настоящий джедай будет использовать хп с параметрами табличного типа.
11 апр 12, 11:19    [12397796]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
пока вариант с хп мне кажется более осуществимым, ведь запросы из клиентского приложения на .net идут

а выгода, выгода будет? и как оценить возможную её величину?
иными словами, какова цена CONVERT_IMPLICIT?
11 апр 12, 11:27    [12397875]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Выгода будет при уходе от запросов с клиента к инкапсюляции их в хп. Из под .Net очень просто работать с параметрами табличного типа. Само по себе влияние CONVERT_IMPLICIT будет сложно оценить.
11 апр 12, 11:39    [12397980]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
MyNiGoo
пока вариант с хп мне кажется более осуществимым, ведь запросы из клиентского приложения на .net идут

а выгода, выгода будет? и как оценить возможную её величину?
иными словами, какова цена CONVERT_IMPLICIT?

преоразование в данном случае мелочь, но подход не верный!!
Процедура с параметрами куда правильнее, да!
11 апр 12, 12:16    [12398294]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
ok, не буду тогда мелочиться, но разработчикам намекну на подход =)
всем спасибо
11 апр 12, 22:11    [12402525]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить