Index-Tuning

聚集索引中列的順序重要嗎?

  • July 22, 2021

我在索引中首先指定哪個欄位是否重要?

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);

索引中定義的列的順序通常表示該索引所涵蓋的所有謂詞子集的組合。

例如,列上的索引(Column1, Column2)將涵蓋謂詞,例如子句,該謂詞在同一子句中或僅在該子句WHERE中進行過濾。它通常不會在該子句中單獨覆蓋,因此該索引不適用於該謂詞子句。Column1``Column2``Column1``Column2

相反,如果您顛倒了定義該索引的列的順序,例如它的定義是(Column2, Column1),那麼它將Column2自行覆蓋,或者Column1Column2同一個謂詞子句中覆蓋。但是,它不會Column1在該條款中單獨涵蓋。

在我上面的答案中添加警告,即 Teradata 有一種稱為雜湊索引的索引,聽起來好像列定義的順序無關緊要,這種索引僅適用於完全匹配的謂詞in 列到索引中散列的任何列。所以聽起來這取決於使用哪種類型的索引,如他們的文件中所討論的那樣。

引用自:https://dba.stackexchange.com/questions/295911