czy warto przełączać KLUCZ PIERWOTNY z typu NVARCHAR na typ INT?
W naszej bazie danych SQL SERVER 2008 R2 mamyCOUNTRIES
tabela referencyjna zawierająca kraje. ThePRIMARY KEY
jest kolumną nvarchar:
create table COUNTRIES(
COUNTRY_ID nvarchar(50) PRIMARY KEY,
... other columns
)
Klucz podstawowy zawiera wartości takie jak „FR”, „GER”, „US”, „UK” itp. Ta tabela zawiera max. 20 rzędów.
Mamy teżSALES
tabela zawierająca dane sprzedaży:
create table SALES(
ID int PRIMARY KEY
COUNTRY_ID nvarchar(50),
PRODUCT_ID int,
DATE datetime,
UNITS decimal(18,2)
... other columns
)
Ta tabela sprzedaży zawiera kolumnę o nazwieCOUNTRY_ID
, także typunvarchar
(nie klucz podstawowy). Ta tabela jest znacznie większa i zawiera około 20 milionów wierszy.
Wewnątrz naszej aplikacji, podczas kwerendy naSALES
tabela, filtrujemy prawie za każdym razemCOUNTRY_ID
. Nawet w takim przypadku wykonanie większości zapytań o agregację zajmuje zbyt dużo czasu (nawet przy odpowiednich indeksach)
Jesteśmy w fazie rozwoju, aby poprawić wydajność zapytań na stronieSALES
stół. Moje pytanie brzmi:
Czy warto przełączaćCOUNTRY_ID
wpisz odnvarchar(50)
do typuint
? Jeśli kolumnaCOUNTRY_ID
jest konwertowany w obu tabelach na typint
, czy mogę oczekiwać lepszej wydajności przy dołączaniu do dwóch stołów?