Database Performance issue? Typical Diagnosis and prevention:
<PRE>
Index 		- Index allows query to do index seek instead of table scan that makes better query plan and query faster, and inprove cache usage.
Materized Views - A materialized view computes and stores summarized data before processing large joins or queries hence eliminates the overhead associated with expensive joins and aggregations. This is very useful for OLAP query.
Query Rewrite   - Bad query text can be overly consuming resounces or blocking use of indexes.
Partition 	- when you have table partition, any large datawarehouse query will only need to go thru a small portion of (historical) data that reduces resources usage.
Compression     - Compression reducing the amount of I/O required to scan that data that can help improve performance for queries that scan large amounts of data.
Parallelism 	- Parallelism can be good but too much good thing is not good, meaning if parallel execution is waiting on the thread to put back results together from multithread tasking then it is not good. 

Database performace problems: Check wait stats - 
Wait event statistics history data reveals various symptoms of problems. I have written a comprehansive running differential query to allow you see the instant wait stats in a time-interval into a history table based on Oracle Tom Kyte's simple illustration.
The key for diagnosis and prevention of database performance issue is to record historical data so you know the baseline and when problem was/is happening. Wait stats is the best indicator so you know how to remedy or prevent repeated incidents.
You could run AWR and ADDM if you have license, use statpack if you don't have diagnostic tuning option license.</PRE>

