This is a big topic, so I cannot go into detail here. But the basic idea is to start a trace in your session with wait events enabled, run the query, and then analyze the trace file. The TKPROF utility can help analyze the wait events. You may find that your query is spending a large amount of time performing sorting to disk. You may find that a slow disk unit is causing problems. There could be other causes too, each of which would be a guess at this point. The wait events will eliminate the guesswork.
This was first published in May 2008