我试图了解什么是 TID 以及它是如何工作的。我在文档中找到了TID的2个定义:
1)来自https://www.postgresql.org/docs/11/datatype-oid.html
系统使用的最终标识符类型是tid,或元组标识符(行标识符)。这是系统列 ctid 的数据类型。元组 ID 是一对(块编号、块内的元组索引),用于标识行在其表中的物理位置。
2)来自https://www.postgresql.org/docs/11/storage-page-layout.html
事实上,PostgreSQL 创建的每个指向项目的指针(ItemPointer,也称为 CTID)都由页码和项目标识符的索引组成。
我理解第二个定义,它对我来说很清楚,但我对第一个定义及其使用的术语感到困惑。
block 中的块索引和元组索引是什么?它们如何与页面和第二个定义匹配?
请帮助并澄清哪个定义是正确的以及我应该如何理解第一个定义中的术语。
我试图比较覆盖 b 树索引和简单 b 树索引之间的潜在性能差异,并与EXPLAIN(ANALYZE,BUFFERS)
输出混淆。
测试环境
-- function to fill test table
CREATE OR REPLACE FUNCTION fillTable (n INTEGER)
RETURNS INTEGER AS $rowsCount$
DECLARE
counter INTEGER := 0 ;
BEGIN
IF (n < 1) THEN
RETURN 0 ;
END IF;
LOOP
EXIT WHEN counter = n ;
counter := counter + 1 ;
insert into key_value_test(key, value) VALUES (counter,counter);
END LOOP ;
return counter;
END ;
$rowsCount$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
简单b-tree索引的测试用例
drop table key_value_test;
create table key_value_test
(
key …
Run Code Online (Sandbox Code Playgroud)