Таким образом, это небольшое улучшение производительности для 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 просто пример.
Думаю, это то, что вам нужно попробовать, как вы это делали раньше, и увидеть проблему с производительностью. У вас есть все необходимые таблицы и достаточно данных, чтобы увидеть разницу. Как и раньше (вы изменились на Varchar) теперь измените его на bigint и посмотрите. И, рассмотрите другое дело, об индексировании в Join Column. –
@ 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