INDEX HINTS

注意事项

兼容限制:

  • 功能仅在B兼容模式下生效。

  • 目前仅支持MySql数据库中完整语法的部分语法及功能。

  • 语法仅在查询语句中使用此功能时生效。

功能描述

为指定的表在扫描时显示的指定期望使用的索引名称。

  • 使用USE INDEX 指定的索引,会在扫描时综合考虑使用此索引扫描的代价和顺序扫描的代价,会选择代价更低的使用。

  • 使用FORCE INDEX 指定的索引,如果可以使用索引扫描,会在扫描时强制使用此索引进行扫描。

  • FORCE INDEX 和USE INDEX 不能同时作用在同一张表中。

  • 多个index_hint 连用等价index_list 中写多个索引名字。

语法格式

  1. tbl_name [ partition_clause ] [ [ AS ] alias ] [ index_hint_list ]
  2. index_hint_list:
  3. index_hint [ index_hint ]
  4. index_hint:
  5. USE {INDEX | KEY} ( [ index_list ] )
  6. | FORCE { INDEX | KEY } ( index_list )
  7. index_list:
  8. index_name [ , index_name ] ...

参数说明

  • index_list

    索引的名称,使用逗号分隔。

  • tbl_name

    泛指一个表名。

示例

  1. openGauss=# explain (costs off,verbose true )select * from db_1097149_tb force key (index_1097149_4) where col2= 3 and col4 = 'a';
  2. QUERY PLAN
  3. ----------------------------------------------------------
  4. Index Scan using index_1097149_4 on public.db_1097149_tb
  5. Output: col1, col2, col3, col4
  6. Index Cond: ((db_1097149_tb.col4)::text = 'a'::text)
  7. Filter: (db_1097149_tb.col2 = 3)
  8. (4 rows)