Vertica中的表是否有主键和辅助键

Do tables in Vertica has primary and secondary keys

vertica中的投影有主键、副键吗?我怎样才能找出投影的关键是什么?

你最好看看 Vertica 的投影文档:

https://www.vertica.com/docs/10.0.x/HTML/Content/Authoring/SQLReferenceManual/Statements/CREATEPROJECTION.htm

存在主键和外键,以及唯一约束 - 作为约束;但这些约束通常被禁用 - 因为它们会大大减慢加载/插入过程。

即使您选择不指定投影的分段和排序子句:每个投影要么未分段,要么由一个值分段,该值取决于一个或多个不可空列的内容(通常是 HASH()一列或多列),并按一列或多列排序。投影定义中的 ORDER BY 子句构成了该投影中使用的数据访问路径。它可以在某种程度上与经典数​​据库中的索引进行比较。

要找出投影的访问路径是什么 - 最快的方法是向它发射 SELECT EXPORT_OBJECTS('','<tablename>', FALSE)。在我们之前使用的示例中,您会看到它按所有四列排序,并按其所有四列的 HASH() 分段,因为我们创建了没有主键或外键的 table:

$ vsql -Atc "SELECT EXPORT_OBJECTS('','example',FALSE)"


CREATE TABLE dbadmin.example
(
    fname varchar(4),
    lname varchar(5),
    hdate date,
    salary numeric(7,2)
);


CREATE PROJECTION dbadmin.example_super /*+basename(example),createtype(L)*/ 
(
 fname,
 lname,
 hdate,
 salary
)
AS
 SELECT example.fname,
        example.lname,
        example.hdate,
        example.salary
 FROM dbadmin.example
 ORDER BY example.fname,
          example.lname,
          example.hdate,
          example.salary
SEGMENTED BY hash(example.fname, example.lname, example.hdate, example.salary) ALL NODES OFFSET 0;