Solved

can I create index on a view or a materialized view ?

Posted on 2007-12-05
6
5,340 Views
Last Modified: 2013-12-19
I have a query which does group by and is really slow. can I create a materialzed view on group by fields and create index on it ? an example would be helpful.

0
Comment
Question by:tech_question
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
6 Comments
 
LVL 27

Accepted Solution

by:
sujith80 earned 300 total points
ID: 20417275
Yes you can have an index on MV.
See the example:

drop materialized view test_mv
/
create materialized view test_mv as
select table_name, count(1) no_of_cols
from user_tab_columns
group by table_name
/
create index test_mv_idx on test_mv( table_name )
/

see how the execution plan changes with an index:

SQL> set autotrace on;
SQL> select * from test_mv where table_name = 'TBL1';
 
TABLE_NAME                     NO_OF_COLS
------------------------------ ----------
TBL1                                    4
-- plan without index
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=1 Bytes=30)
   1    0   MAT_VIEW ACCESS (FULL) OF 'TEST_MV' (MAT_VIEW) (Cost=3 Card=1 Bytes=30)
 
SQL> 
SQL> create index test_mv_idx on test_mv( table_name )
  2  /
 
Index created.
 
SQL> select * from test_mv where table_name = 'TBL1';
 
TABLE_NAME                     NO_OF_COLS
------------------------------ ----------
TBL1                                    4
 
-- plan with index
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1 Bytes=30)
   1    0   MAT_VIEW ACCESS (BY INDEX ROWID) OF 'TEST_MV' (MAT_VIEW) (Cost=2 Card=1 Bytes=30)
   2    1     INDEX (RANGE SCAN) OF 'TEST_MV_IDX' (INDEX) (Cost=1 Card=1)
 
SQL> 

Open in new window

0
 

Author Comment

by:tech_question
ID: 20417348
will the indexes automatically get updated ?
0
 
LVL 27

Expert Comment

by:sujith80
ID: 20417353
Yes
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 7

Assisted Solution

by:DiscoNova
DiscoNova earned 200 total points
ID: 20469569
Just to comment; every time I've figured that I need a materialized view, I've been wrong. Furthermore, the MVs have usually caused me more trouble than they've ever proved to be worth of - after all; they were originally designed as items used for replication rather than "speeding up queries", which seems to be what too many people are trying to use them for :)

So... Are you absolutely certain you're trying to solve the correct problem? How about indexing the tables below the view to better accommodate for the query you're trying to perform on the view?

As an answer to the question - as you've already heard; I'd say sujith80... you can have indexes on materialized views, and the indexes will be automatically updated (along with the MVs, which is a different matter altogether; they don't necessarily do it automatically unless you tell them to (and as a warning, not all MVs can be set up to automatically update when the data below changes)).
0
 
LVL 7

Expert Comment

by:DiscoNova
ID: 20469575
I meant to write "I'd say sujith80 is correct"... wonder where the two words disappeared :)
0
 

Author Closing Comment

by:tech_question
ID: 31413053
Guys thanks for the feedback. I ended up not using an MV but using an ETL.
0

Featured Post

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction A previously published article on Experts Exchange ("Joins in Oracle", http://www.experts-exchange.com/Database/Oracle/A_8249-Joins-in-Oracle.html) makes a statement about "Oracle proprietary" joins and mixes the join syntax with gen…
Checking the Alert Log in AWS RDS Oracle can be a pain through their user interface.  I made a script to download the Alert Log, look for errors, and email me the trace files.  In this article I'll describe what I did and share my script.
Via a live example show how to connect to RMAN, make basic configuration settings changes and then take a backup of a demo database
Via a live example, show how to restore a database from backup after a simulated disk failure using RMAN.

724 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question