表值函数往往会在查询计划中创建大量嵌套循环。Vertica 作为大数据 DBMS 具有通用架构,该架构倾向于避免任何会减慢查询计划的事情。
连接不是意大利面条代码。它们是关系范式的一部分。
想想看,我所知道的意大利面条代码是指过程或面向对象语言的流程。您可以使用从 COBOL 到 Pascal 到 C 甚至 Python 的任何东西创建意大利面条式代码,但不能使用 SQL 构成的描述性语言......
但是为了简化代码并使您的查询更快,请尝试使用扁平列:
CREATE TABLE f_marks (
mark_ts TIMESTAMP
, subject_id INT
, stud_id INT
, subject VARCHAR(32)
DEFAULT (SELECT subject FROM d_subject WHERE id=f_marks.subject_id)
, stud_name VARCHAR(32)
DEFAULT (SELECT stud_name FROM d_student WHERE id=f_marks.stud_id)
);
您插入f_marks
使用:
INSERT INTO f_marks (
mark_ts,subject_id,stud_id
) VALUES (
CURRENT_TIMESTAMP,4321,123986
)
, 并且这两个VARCHAR
s 是由魔法填充的 - 它实际上非常高效。
就我而言,一种更清洁的方法....
这是关于它的文档:
https ://www.vertica.com/docs/10.0.x/HTML/Content/Authoring/AnalyzingData/FlattenedTables/FlattenedTables.htm