更新时间:2025-05-29 GMT+08:00

Tid Scan

算子说明

行号扫描,该算子主要利用行号(ctid)过滤元组并返回。ASTORE场景下,数据按行存储在HEAP PAGE中,在B-tree 索引中除了存储字段的value,还会存储对应的行号,因此GaussDB中支持通过行号进行快速检索。

行号的写法为:

(page_number,item_number)      -- page_number从0开始编号,item_number从1开始编号

通过给定的ctid值找到在磁盘或缓存中对应的元组。

典型场景

前提条件:GUC参数enable_tidscan设置为on。

对于支持Tid Scan的表,给定合法有效的行号,可对数据进行快速检索。当前GaussDB会选择Tid Scan的场景只有WHERE条件为"="的查询,不支持in的条件查询。

示例

--数据准备。
gaussdb=# CREATE TABLE t_tid_test(a numeric,b numeric,c numeric);
CREATE TABLE 

gaussdb=# DECLARE 
    n1 numeric := 10; 
    n2 numeric := 0; 
    n3 numeric := 100; 
BEGIN 
    WHILE n1 > 0 LOOP 
        WHILE n2 < 100 LOOP 
            WHILE n3 > 0 LOOP 
                INSERT INTO t_tid_test VALUES(n1, n2, n3); 
                n3 := n3 - 1; 
            END LOOP; 
            n2 := n2 + 1; 
        END LOOP; 
        n1 := n1 - 1; 
    END LOOP; 
END; 
/
ANONYMOUS BLOCK EXECUTE

--执行结果。
gaussdb=# SET enable_tidscan = on; 
SET
gaussdb=# EXPLAIN ANALYZE SELECT * FROM t_tid_test WHERE ctid = '(0,10)'::tid; 
                                             QUERY PLAN 
----------------------------------------------------------------------------------------------------- 
 Tid Scan on t_tid_test  (cost=0.00..4.01 rows=1 width=14) (actual time=0.016..0.016 rows=1 loops=1) 
   TID Cond: (ctid = '(0,10)'::tid) 
 Total runtime: 0.077 ms 
(3 rows)

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

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

信息名称

含义

Tid Scan

算子的名称。

TID Cond

该算子的过滤谓词,在查询执行时,满足这些条件的行会被包含在最终的结果集中。