全部產品
Search
文件中心

Lindorm:單表多搜尋索引(公測中)

更新時間:Oct 30, 2025

本文介紹如何為單個主表建立多個搜尋索引。

前提條件

  • Lindorm寬表引擎為2.8.2.3及以上版本。如何查看或升級目前的版本,請參見升級小版本

  • LindormLTS引擎為3.8.12.5及以上版本。如何查看或升級目前的版本,請參見升級小版本

使用限制

  • 單個主表上最多支援建立5個搜尋索引。

  • 同一個主表上的搜尋索引不允許相互同名、不允許與其它類型的索引同名。

使用方法

  1. 建立寬表。

    create table testTable (pk int, c1 int, c2 varchar, c3 long, primary key(pk));
    說明

    Lindorm搜尋索引的多索引特性目前處於公測階段,如需體驗該功能,請聯絡Lindorm支援人員(DingTalk號:s0s3eg3)開啟。

  2. 在同一個寬表上可建立多個搜尋索引。每個搜尋索引的索引列及屬性可以相同。

    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);
  3. 向寬表中寫入資料,資料會同步到每個搜尋索引中。

    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);
  4. 資料查詢。根據查詢條件的不同,將自動選擇合適的搜尋索引。如果有多個搜尋索引均覆蓋了查詢條件,將會選擇其中一個。

    1. 查詢c1、c2和c3列,自動選擇索引idx3。

      select * from testTable where c1>0 and c2>'0' and c3>0;
    2. 查詢c1和c2列,索引idx1和idx3均可覆蓋,將會選擇索引idx1或idx3。

      select * from testTable where c1>0 and c2>'0';
    3. 查詢c3列,索引idx2和idx3均可覆蓋,將會選擇索引idx2或idx3。

      select * from testTable where c3>0;
  5. 查詢時顯式指定索引。

    可通過HINT文法顯式指定某個搜尋索引用於查詢。

    select /*+ _l_force_index_('idx1') */ * from testTable where c1>0 and c2>'0';
  6. 控制索引的狀態。

    可通過ALTER INDEX語句獨立控制各個索引的狀態。

    alter index idx1 on testTable inactive;
    alter index idx1 on testTable disabled;

    狀態值

    說明

    ACTIVE

    該搜尋索引可用於查詢,寬表資料會自動構建索引。

    INACTIVE

    該搜尋索引不可用於查詢,寬表資料仍然會自動構建索引。

    DISABLED

    該搜尋索引不可用於查詢,寬表資料不會構建索引。

    說明

    處於DISABLED狀態的搜尋索引,不能夠再切換到其他狀態,需要執行REBUILD才可重新啟用。