Importa qual campo eu especifico primeiro no índice?
gostaria
CREATE SET TABLE my_table
(
validity_date DATE
, branch_id SMALLINT
, account_class_id BYTEINT
, catalog_id INTEGER
, No_events FLOAT
)
PRIMARY INDEX (validity_date, branch_id);
ser tratado pelo servidor da mesma forma que
CREATE SET TABLE my_table
(
validity_date DATE
, branch_id SMALLINT
, account_class_id BYTEINT
, catalog_id INTEGER
, No_events FLOAT
)
PRIMARY INDEX (branch_id, validity_date);
Não, não há nenhuma diferença no Teradata. O PI é baseado em hash, ambas as colunas devem ser usadas em uma condição Where ou Join para permitir acesso baseado em índice.
A ordenação das colunas definidas no índice geralmente representa as combinações de todos os subconjuntos de predicados cobertos por esse índice.
Por exemplo, um índice nas colunas
(Column1, Column2)
cobrirá predicados, como umaWHERE
cláusula, que filtram na mesma cláusula ou somenteColumn1
nessa cláusula. Ele normalmente não cobrirá por si só nessa cláusula e, portanto, esse índice não é aplicável a essa cláusula de predicado.Column2
Column1
Column2
Por outro lado, se você invertesse a ordem para a qual definiu as colunas desse índice, de modo que sua definição fosse
(Column2, Column1)
, ele cobririaColumn2
por si mesmo ouColumn1
eColumn2
na mesma cláusula de predicado. Mas então não cobririaColumn1
por si só nessa cláusula.Adicionando a ressalva à minha resposta acima de que, com o Teradata, existe um tipo de índice conhecido como índice de hash que parece não importar em que ordem as colunas são definidas, mas esse tipo de índice é aplicável apenas a predicados que correspondem exatamente em colunas para quaisquer colunas que tenham hash no índice. Portanto, parece que depende de qual tipo de índice é usado, conforme discutido em seus documentos .