Registering an existing table as a materialized query table
You might already have manually created base tables that act like materialized query tables and have queries that directly access the base tables. These base tables are often referred to as summary tables.
Before you begin
To ensure the accuracy of data that is used in automatic query rewrite, ensure that the summary table is current before registering it as a materialized query table.
Alternatively, you can follow these steps:
- Register the summary table as a materialized query table with automatic query rewrite disabled.
- Update the newly registered materialized query table to refresh the data.
- Use the ALTER TABLE statement on the materialized query table to enable automatic query rewrite.
Procedure
To take advantage of automatic query rewrite for an existing summary table:
The DATA INITIALLY DEFERRED clause indicates that the table data is to remain the same when the ALTER statement completes. The MAINTAINED BY USER clause indicates that the table is user-maintained.
Results
The table becomes immediately eligible for use in automatic query rewrite. The isolation level of the materialized query table is the isolation level at which the ALTER TABLE statement is executed.
You can continue to update the data in the table by using the LOAD utility or the INSERT, UPDATE, MERGE, TRUNCATE, or DELETE statements. You can also use the REFRESH TABLE statement to update the data in the table.
Example
Assume that you have an existing summary table named TRANSCOUNT. The TRANSCOUNT tabl has four columns to track the number of transactions by account, location, and year. Assume that TRANSCOUNT was created with this CREATE TABLE statement:
CREATE TABLE TRANSCOUNT
(ACCTID INTEGER NOT NULL
LOCID INTEGER NOT NULL
YEAR INTEGER NOT NULL
CNT INTEGER NOT NULL);
The following SELECT statement then populated TRANSCOUNT with data that was derived from aggregating values in the TRANS table:
SELECT ACCTID, LOCID, YEAR, COUNT(*)
FROM TRANS
GROUP BY ACCTID, LOCID, YEAR ;
You could use the following ALTER TABLE statement to register TRANSCOUNT as a materialized query table. The statement specifies the ADD MATERIALIZED QUERY clause:
ALTER TABLE TRANSCOUNT ADD MATERIALIZED QUERY
(SELECT ACCTID, LOCID, YEAR, COUNT(*) as cnt
FROM TRANS
GROUP BY ACCTID, LOCID, YEAR )
DATA INITIALLY DEFERRED
REFRESH DEFERRED
MAINTAINED BY USER;