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=# ANALYZE test2; --执行结果 gaussdb=# EXPLAIN SELECT a, b FROM test2 WHERE a = 10 AND b = 20; QUERY PLAN ---------------------------------------------------------------------------------- Streaming (type: GATHER) (cost=0.06..8.36 rows=1 width=8) Node/s: datanode2 -> Index Only Scan using test2_idx on test2 (cost=0.00..8.27 rows=1 width=8) Index Cond: ((a = 10) AND (b = 20)) (4 rows) --删除。 gaussdb=# DROP TABLE test2;
上述示例中,Index Only Scan算子输出信息如下所示。
信息名称 |
含义 |
---|---|
Index Only Scan |
算子的名称。 |
Index Cond |
该算子的过滤谓词,示例中的过滤条件为a列的值等于10并且b的值等于20。在查询执行时,满足这些条件的行会被包含在最终的结果集中。 |