SQL server Implizite Umwandlung in varchar vs bigint

Zusammenfassend ist das eine leicht verbesserte Verbesserung zu varchar anstelle von bigint.

Zum Beispiel habe ich eine zwei Tabelle wie diese wie unten

Artikel

ID bigint PK; item_code varchar(256); 

SalesItem

 ID bigint PK; item_id varchar(256); 

Bitte beachten Sie, dass item_id kein Fremdschlüssel ist und aufgrund eines Sonderfalls item_id varchar(256) erlaubt ist;

Ich habe eine solche SQL-statement ausprobiert

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

Das verursacht eine implizite Konvertierung, die SQL server versucht, Varchar in int zu konvertieren und die performance ist am schlimmsten.

Irgendwie haben wir die sql in unten geändert:

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

Nun ist die performance hervorragend, um fast 70% -80%

Nur Kuriositäten sind, dass die Sequenzen auf 'ON' Angelegenheit sind? und was soll ich umwandeln?

Statt ich konvertiere zu varchar(256) auf item.id ist das besser, dass ich in bigint auf salesitem.item_id ?

Zum Beispiel:

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

Bitte beachten Sie, dass über sql nur ein Beispiel ist.

Im Allgemeinen vergleichen zwei Zahlen wird besser als das Vergleichen von zwei Strings.

Sagen Sie, dass in Ihrem Fall gibt es eine geringe Chance, dass die Auswahl könnte fehlschlagen, wenn Sie die SalesItem.item_id zu bigint konvertieren, da es als Varchar in den ersten Platz gespeichert wird, könnte es auch einige character, die nicht konvertiert werden können zu Integer.