
# 基于全局二级索引查询HBase表数据
#### 基于索引查询HBase表数据
在具有索引的用户表中，可以使用SingleColumnValueFilter来查询数据。当查询条件可以命中索引时，查询速度远快于原表查询。
索引的命中规则如下：
- 多个AND条件查询
  - 当用于查询的列至少包含索引的一个列时，使用索引会提高查询性能。 例如，为C1、C2和C3创建组合索引。
    该索引在以下情况下生效：
    **Filter_Condition（IndexCol1）AND Filter_Condition（IndexCol2）AND Filter_Condition（IndexCol3）**
    **Filter_Condition（IndexCol1）AND Filter_Condition（IndexCol2）**
    **Filter_Condition（IndexCol1）AND Filter_Condition（IndexCol3）**
    **Filter_Condition（IndexCol1）**
    该索引在下列情况下不生效：
    **Filter_Condition（IndexCol2）AND Filter_Condition（IndexCol3）**
    **Filter_Condition（IndexCol2）**
    **Filter_Condition（IndexCol3）**
    
  
  
  
  - 当在查询中使用"索引列"和"非索引列"进行过滤时，使用索引可提高查询性能。当非索引列命中覆盖列时，查询性能最优；如果有需经常查询的非索引列，建议定义为覆盖列。例如： **Filter_Condition（IndexCol1）AND Filter_Condition（NonIndexCol1）**
    **Filter_Condition（IndexCol1）AND Filter_Condition（IndexCol2）AND Filter_Condition（NonIndexCol1）**
    
  
  - 当多个列用于查询时，只能为组合索引中的最后一列指定值范围，而其他列只能设置为指定值。 例如，为C1、C2和C3创建组合索引。在范围查询中，只能为C3设置数值范围，过滤条件为"C1 = XXX，C2 = XXX，C3 = *数值范围*"。
    
   
- 多个OR条件查询
  例如，为C1、C2和C3创建组合索引。
  - 仅对索引列首个字段进行过滤时（支持范围过滤），使用索引可提高查询性能。 **Filter_Condition（IndexCol1）OR Filter_Condition（IndexCol1）OR Filter_Condition（IndexCol1）**
    
  
  - 对非索引和非索引列进行过滤时，无法命中索引，查询性能不会提高。 **Filter_Condition（IndexCol1）OR Filter_Condition（NonIndexCol1）**
    
  
  - 组合查询时，最外层包含OR条件时无法命中索引，查询性能不会提高。 **Filter_Condition（IndexCol1）OR Filter_Condition（NonIndexCol1）**
    **（Filter_Condition（IndexCol1）AND Filter_Condition（IndexCol2)）OR（Filter_Condition（NonIndexCol1)）**
    
   
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
  减少**OR**条件使用，尤其是OR条件+范围条件，命中索引的情况下也会造成大范围查询，速度较慢。
  
 
