
# 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 | 该算子的过滤谓词，在查询执行时，满足这些条件的行会被包含在最终的结果集中。 |
   
