要約すると、bigint の代わりに varchar のわずかなパフォーマンスの向上です。
たとえば、次のような2つのテーブルがあります
アイテム
ID bigint PK;
item_code varchar(256);
セールスアイテム
ID bigint PK;
item_id varchar(256);
は外部キーではないことに注意してください。item_id
いくつかの特殊なケースにより、外部キーitem_id
になることが許可されていますvarchar(256)
。
私はこのようなSQL文を試しました
Select SalesItem.item_id
from SalesItem
left join Item on SalesItem.item_id = Item.id
これにより、SQL Server が varchar を int に変換しようとする暗黙の変換が発生し、パフォーマンスが最悪になります。
どういうわけか、SQLを以下に変更しました:
Select SalesItem.item_id
from SalesItem
left join Item on SalesItem.item_id = convert(varchar(256), Item.id)
パフォーマンスは抜群で、70% ~ 80% 近く低下しています。
ちょっと気になるのは、「ON」の問題のシーケンスですか?そして、私はそれを変換する必要がありますか?
onに変換する代わりに、varchar(256)
onに変換したitem.id
ほうがよいですか?bigint
salesitem.item_id
例:
Select SalesItem.item_id
from SalesItem
left join Item on Item.id = convert(bigint, SalesItem.item_id)
上記のSQLは単なるサンプルであることに注意してください。