Traditional databases use row-store architecture. To process a query, a row store reads all of the columns in all of the tables mentioned in the query, regardless of the number of columns a table has. Often, analytical queries access (or require to access) only few columns of a table containing up to several hundred columns, thus making a whole-column-scan unwarranted. Additionally, a whole-column-scan also results in the retrieval of a lot of unnecessary data. Unlike other RDBMSes, Vertica reads the columns from database objects called projections. Consider the following example:
Now, suppose we have the following query:
SELECT A, D, E FROM Table1 JOIN Table2 ON Table1.C_pk = Table2.C_fk;
On execution of the preceding query, a row store will typically scan through all columns of each table from physical storage, while a column store such as Vertica will only read three columns.
Projections constitute the physical schema of Vertica. In Vertica, a table only serves...