本文介紹如何為單個主表建立多個搜尋索引。
前提條件
使用限制
單個主表上最多支援建立5個搜尋索引。
同一個主表上的搜尋索引不允許相互同名、不允許與其它類型的索引同名。
使用方法
建立寬表。
CREATE TABLE testTable (pk INT, c1 INT, c2 VARCHAR, c3 LONG, PRIMARY KEY(pk));說明Lindorm搜尋索引的多索引特性目前處於公測階段,如需體驗該功能,請聯絡Lindorm支援人員(DingTalk號:s0s3eg3)開啟。
在同一個寬表上可建立多個搜尋索引。每個搜尋索引的索引列及屬性可以相同。
CREATE INDEX idx1 USING SEARCH ON testTable (c1,c2); CREATE INDEX idx2 USING SEARCH ON testTable (c3); CREATE INDEX idx3 USING SEARCH ON testTable (c1,c2,c3);向寬表中寫入資料,資料會同步到每個搜尋索引中。
UPSERT INTO testTable(pk,c1,c2,c3) VALUES (1,1,'1',1); UPSERT INTO testTable(pk,c1,c2,c3) VALUES (2,2,'2',2); UPSERT INTO testTable(pk,c1,c2,c3) VALUES (3,3,'3',3); UPSERT INTO testTable(pk,c1,c2,c3) VALUES (4,4,'4',4);資料查詢。根據查詢條件的不同,將自動選擇合適的搜尋索引。如果有多個搜尋索引均覆蓋了查詢條件,將會選擇其中一個。
查詢c1、c2和c3列,自動選擇索引idx3。
SELECT * FROM testTable WHERE c1>0 AND c2>'0' AND c3>0;查詢c1和c2列,索引idx1和idx3均可覆蓋,將會選擇索引idx1或idx3。
SELECT * FROM testTable WHERE c1>0 AND c2>'0';查詢c3列,索引idx2和idx3均可覆蓋,將會選擇索引idx2或idx3。
SELECT * FROM testTable WHERE c3>0;
查詢時顯式指定索引。
可通過HINT文法顯式指定某個搜尋索引用於查詢。
SELECT /*+ _l_force_index_('idx1') */ * FROM testTable WHERE c1>0 AND c2>'0';控制索引的狀態。
可通過ALTER INDEX語句獨立控制各個索引的狀態。
ALTER INDEX idx1 ON testTable INACTIVE; ALTER INDEX idx1 ON testTable DISABLED;狀態值
說明
ACTIVE
該搜尋索引可用於查詢,寬表資料會自動構建索引。
INACTIVE
該搜尋索引不可用於查詢,寬表資料仍然會自動構建索引。
DISABLED
該搜尋索引不可用於查詢,寬表資料不會構建索引。
說明處於DISABLED狀態的搜尋索引,不能夠再切換到其他狀態,需要執行REBUILD才可重新啟用。