Postgresql 表的隐式索引

Postgresql 表的隐式索引,postgresql,postgresql-9.1,Postgresql,Postgresql 9.1,我正在学习Postgresql和db。我有一个这样的简单查询,我想了解它的作用 CREATE TABLE adempiere.c_mom( c_mom_id NUMERIC(10,0) NOT NULL, isactive character(1) DEFAULT 'Y'::bpchar NOT NULL, start_date date NOT NULL, start_time timestamp without time zone NOT NULL, end_time timestamp w

我正在学习Postgresql和db。我有一个这样的简单查询,我想了解它的作用

CREATE TABLE adempiere.c_mom(
c_mom_id NUMERIC(10,0) NOT NULL,
isactive character(1) DEFAULT 'Y'::bpchar NOT NULL,
start_date date NOT NULL,
start_time timestamp without time zone NOT NULL,
end_time timestamp without time zone NOT NULL,
CONSTRAINT c_mom_pkey PRIMARY KEY (c_mom_id)
);
所以在我执行这个之后,我得到了

NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "c_mom_pkey" for table "c_mom"
  • 现在我知道我的PK
    是c_mom_id
    ,但是在name
    c_mom_key
    下创建隐式索引的目的是什么
  • 默认的“Y”是什么::bpchar,或者通常psql中的
    做什么

  • 谢谢

    符号是PostgreSQL特有的符号,在本例中输入
    bpchar
    (空白填充字符)

    创建一个索引以支持主键,从而使它们更有效。如果没有索引来支持它,则每个insert语句都必须扫描整个表,以确定插入是否会创建重复键。使用索引可以加快速度(如果表很大,则会显著加快速度)


    这不是特定于PostgreSQL的。许多关系数据库将创建唯一的索引以支持主键。

    与您的问题无关,但
    是活动字符(1)默认的“Y”::bpchar not NULL,
    意味着使用一个UTF-8编码字符来选择0/1单位值(因此一位有几个字节),请使用布尔数据类型存储布尔值。顺便说一句,您不需要同时使用
    start\u date
    start\u time
    <代码>时间戳包括日期和时间。