2013-06-28 4 views
0

Таким образом, это небольшое улучшение производительности для varchar вместо bigint.SQL Server Неявное преобразование в varchar vs bigint

К примеру, у меня есть две таблицы, как это, как показано ниже

Пункт

ID bigint PK; 
item_code varchar(256); 

SalesItem

ID bigint PK; 
item_id varchar(256); 

Пожалуйста, обратите внимание, что item_id не является внешним ключом и из-за какого-то особого случая item_id разрешено be varchar(256);

Я попробовал SQL заявление, как этот

Select SalesItem.item_id 
from SalesItem 
left join Item on SalesItem.item_id = Item.id 

Это вызывает неявное преобразование, что SQL Server пытается преобразовать VARCHAR в междунар и производительность является худшим.

Так или иначе, мы изменили SQL в поле ниже:

Select SalesItem.item_id 
from SalesItem 
left join Item on SalesItem.item_id = convert(varchar(256), Item.id) 

Ну производительность является выдающимся, снизилась почти на 70% -80%

всего любопытными о том, что последовательности на 'ON' материи ? и какой должен его преобразовать?

Вместо того, чтобы преобразовать в varchar(256) на item.id является то, что лучше, что я конвертировать в bigint на salesitem.item_id?

Для например:

Select SalesItem.item_id 
from SalesItem 
left join Item on Item.id = convert(bigint, SalesItem.item_id) 

Пожалуйста, обратите внимание, что выше SQL просто пример.

+0

Думаю, это то, что вам нужно попробовать, как вы это делали раньше, и увидеть проблему с производительностью. У вас есть все необходимые таблицы и достаточно данных, чтобы увидеть разницу. Как и раньше (вы изменились на Varchar) теперь измените его на bigint и посмотрите. И, рассмотрите другое дело, об индексировании в Join Column. –

+0

@ N.p Subedi Ya, спасибо за консультацию. Я тестировал преобразование в основную таблицу намного быстрее: от 3 минут до нескольких секунд Правильный sql будет [Select salesitem.item_id from SalesItem left join Item on Item.id = convert (bigint, Salesitem.item_id)] ​​вместо этого конвертировать item.id в varchar (256), гораздо быстрее я конвертирую salesitem.item_id в bigint. – Worgon

ответ

1

В целом сравнение двух чисел будет лучше, чем сравнение двух строк.

Сказав, что в вашем случае есть небольшой шанс, что выбор может завершиться неудачно при преобразовании SalesItem.item_id в bigint, поскольку он хранится в первую очередь как varchar, у него могут быть и некоторые символы, которые не могут быть преобразованы в Integer.

+0

Протестировано, это определенно быстрее, если я конвертирую его в большой int. – Worgon