我在索引中首先指定哪个字段是否重要?
将
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);
被服务器视为相同
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);
不,Teradata 完全没有区别。PI 是基于散列的,两个列都必须在 Where- 或 Join- 条件中使用以允许基于索引的访问。
索引中定义的列的顺序通常表示该索引所涵盖的所有谓词子集的组合。
例如,列上的索引
(Column1, Column2)
将涵盖谓词,例如子句,该谓词在同一子句中或仅在该子句WHERE
中进行过滤。它通常不会在该子句中单独覆盖,因此该索引不适用于该谓词子句。Column1
Column2
Column1
Column2
相反,如果您颠倒了定义该索引的列的顺序,例如它的定义是
(Column2, Column1)
,那么它将自己覆盖Column2
,或者Column1
在Column2
同一个谓词子句中覆盖。但是,它不会Column1
在该条款中单独涵盖。在我上面的答案中添加警告,即 Teradata 有一种称为哈希索引的索引,听起来好像列的定义顺序无关紧要,但这种索引仅适用于完全匹配的谓词in 列到索引中散列的任何列。所以听起来这取决于使用哪种类型的索引,如他们的文档中所讨论的那样。