---
title: 基于索引查询数据
description: "在具有索引的用户表中，可以使用SingleColumnValueFilter来查询数据。当查询条件可以命中索引时，查询速度远快于原表查询。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0211.html
sourcePath: /source/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0211.html
indexId: b5eb476766e8daa3144a51d7cc4123897cf745b3ed6d17bf902aeae6d0b62c4878
---
# 基于索引查询数据

在具有索引的用户表中，可以使用SingleColumnValueFilter来查询数据。当查询条件可以命中索引时，查询速度远快于原表查询。

#### 使用方法

索引的命中规则如下。

- 多个AND条件查询。
  当用于查询的列至少包含索引第一个列时，使用索引会提高查询性能。

  例如，为IndexCol1、IndexCol2和IndexCol3创建组合索引。

  该索引在以下情况下生效。

```
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（IndexCol1）AND Filter_Condition（NonIndexCol1）
Filter_Condition（IndexCol1）AND Filter_Condition（IndexCol2）AND Filter_Condition（NonIndexCol1）
```


  该索引在下列情况下不生效。

```
Filter_Condition（IndexCol2）AND Filter_Condition（IndexCol3）
Filter_Condition（IndexCol2）
Filter_Condition（IndexCol3）
Filter_Condition（NonIndexCol1）
```


- 多个OR条件查询。
例如，为C1、C2和C3创建组合索引。

  - 仅对索引列首个字段进行过滤时（支持范围过滤），使用索引可提高查询性能。

```
Filter_Condition（IndexCol1）OR Filter_Condition（IndexCol1）OR Filter_Condition（IndexCol1）
```


  - 对多个索引列进行过滤时，无法命中索引，查询性能不会提高。

```
Filter_Condition（IndexCol1）OR Filter_Condition（IndexCol2）
```


  - 对索引和非索引列进行过滤时，无法命中索引，查询性能不会提高。

```
Filter_Condition（IndexCol1）OR Filter_Condition（NonIndexCol1）
```


  - 特殊情况，当OR的每个部分都能命中索引，可以命中索引，提高查询性能。

```
（Filter_Condition（IndexCol1）AND Filter_Condition（NonIndexCol1））OR（Filter_Condition（IndexCol1）AND Filter_Condition（IndexCol2））
```


#### 使用建议

- 尽可能让索引列和覆盖列能完全覆盖查询列和查询条件列，这样子可以通过只查询索引表来获取数据，性能更优
- 当在查询条件中不止有索引列的时候，尽可能让这些非索引列能命中覆盖列，命中覆盖列可以在查询索引表时使用这些查询条件，从而筛选更多数据
- 减少OR条件使用，尤其是OR条件+范围条件，命中索引的情况下也会造成大范围查询，速度较慢。
- 由于索引列是有序的，查询条件尽可能存在更多从头连续的索引列。且这些从头连续的索引列的条件只能为单个或多个指定值，如果为区间的话，从头连续的索引列则到条件为区间的这个索引列为止，之后的索引列则会被用于查询索引表时的过滤器。更多索引列的使用，通常筛选能力更强，性能更优。
- 由于索引表不继承数据表的时间戳，不建议使用索引查询结果的时间戳信息。
