更新时间:2025-03-13 GMT+08:00

Index Only Scan

算子说明

Index Only Scan是GaussDB中的一种查询优化技术,它可以通过只扫描索引而不需要访问表数据来提高查询性能。在执行查询时,如果查询条件只涉及到表的某个索引列,就可以使用Index Only Scan来优化查询。Index Only Scan会直接扫描索引,从而减少了I/O操作和CPU开销,提高了查询性能。

典型场景

只需要查询索引列的值,而不需要访问表中的其他列。例如,查询一个表中的某个列的最大值或最小值,或者查询一个列的不同值的数量。

示例

示例:目标列中仅含索引列。

--数据准备。 
gaussdb=# CREATE TABLE test2 (a int, b int); 
CREATE TABLE 
gaussdb=# CREATE INDEX test2_idx ON test2 (a, b); 
CREATE INDEX 

--随机插入1000条数据。
gaussdb=# INSERT INTO test2 VALUES(generate_series(1, 1000), generate_series(1, 1000)); 
INSERT 0 1000

--执行结果 
gaussdb=# EXPLAIN SELECT a, b FROM test2 WHERE a = 10 AND b = 20; 
                                 QUERY PLAN                                  
---------------------------------------------------------------------------- 
 [Bypass] 
 Index Only Scan using test2_idx on test2  (cost=0.00..4.27 rows=1 width=8) 
   Index Cond: ((a = 10) AND (b = 20)) 
(3 rows)

--删除表。
gaussdb=# DROP TABLE test2;

上述示例中,Index Only Scan算子输出信息如下所示。

信息名称

含义

Index Only Scan

算子的名称。

Index Cond

该算子的过滤谓词,示例中的过滤条件为a列的值等于10并且b的值等于20。在查询执行时,满足这些条件的行会被包含在最终的结果集中。