本文介紹如何為單個主表建立多個搜尋索引。
前提條件
使用限制
單個主表上最多支援建立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才可重新啟用。