
Example:
dbadmin=> CREATE EXTERNAL TABLE small_table_ext (c1 int, c2 VARCHAR(100)) AS COPY FROM '/home/dbadmin/small_table.txt';
CREATE TABLE
dbadmin=> SELECT COUNT(*) FROM small_table_ext;
COUNT
-------
10
(1 row)
dbadmin=> CREATE EXTERNAL TABLE big_table_ext (c1 int, c2 VARCHAR(100)) AS COPY FROM '/home/dbadmin/big_table.txt';
CREATE TABLE
dbadmin=> SELECT COUNT(*) FROM big_table_ext;
COUNT
----------
10000000
(1 row)
dbadmin=> \timing on
Timing is on.
dbadmin=> SELECT COUNT(*) FROM big_table_ext JOIN small_table_ext USING (c1);
COUNT
-------
10
(1 row)
Time: First fetch (1 row): 9152.170 ms. All rows formatted: 9152.234 ms
dbadmin=> SELECT analyze_external_row_count('small_table_ext');
analyze_external_row_count
----------------------------
0
(1 row)
Time: First fetch (1 row): 20.781 ms. All rows formatted: 20.824 ms
dbadmin=> SELECT analyze_external_row_count('big_table_ext');
analyze_external_row_count
----------------------------
0
(1 row)
Time: First fetch (1 row): 1499.519 ms. All rows formatted: 1499.563 ms
dbadmin=> SELECT COUNT(*) FROM big_table_ext JOIN small_table_ext USING (c1);
COUNT
-------
10
(1 row)
Time: First fetch (1 row): 1538.365 ms. All rows formatted: 1538.413 ms
In the example, we dropped the query run time from 9.2 seconds down to 1.5 seconds by simply letting Vertica know the external table row counts!
Have Fun!