Tid Scan

名称

Tid扫描算子

介绍

Tid实际上记录了一行数据(元组)的物理地址,可通过Tid值直接从磁盘获得数据,是访问单行数据的最快方式。

作为一种特殊的扫描方式,在查询时,只有谓词中有rowid且指定为单值或者使用游标定位更新时才会进行Tid扫描

举例

--清理环境
DROP TABLE t1 CASCADE;

--创建环境
CREATE TABLE t1(a int);

INSERT INTO t1 VALUES(1);
INSERT INTO t1 VALUES(2);
INSERT INTO t1 VALUES(3);

--查询行号rowid
SELECT ROWID FROM t1;

         ROWID
-----------------
           30698
 281474976741354
 562949953452010

EXPLAIN ANALYZE SELECT * FROM t1 WHERE ROWID = 30698;
                                        QUERY PLAN
------------------------------------------------------------------------------------------
 Tid Scan on T1  (cost=0.00..1.01 rows=1 width=4) (actual time=0.02..0.02 rows=1 loops=1)
   Filter: ("ROWID" = 30698::bigint)
 Planning Time: 0.16 msec
 Execution Time: 0.13 msec
(4 rows)
  • on T1 算子属性,表示Tid扫描的目标表
  • Filter 限定条件
--清理环境
DROP TABLE t1 CASCADE;

--创建环境
CREATE TABLE t1(a int);
INSERT INTO t1 VALUES(1);
INSERT INTO t1 VALUES(2);
INSERT INTO t1 VALUES(3);

--创建游标
DECLARE c1 SCROLL CURSOR FOR SELECT * FROM t1;
OPEN c1;
FETCH from c1;

EXPLAIN ANALYZE DELETE FROM t1 WHERE CURRENT OF c1;
                                        QUERY PLAN
------------------------------------------------------------------------------------------
 Tid Scan on T1  (cost=0.00..1.01 rows=1 width=8) (actual time=0.04..0.04 rows=1 loops=1)
   Filter: ("ROWID" = 281474976727594::bigint)
 Planning Time: 0.12 msec
 Execution Time: 0.12 msec
(4 rows)

CLOSE c1;

--清理环境
DEALLOCATE c1;
DROP TABLE t1 CASCADE;