First of all : 6 million records is a lot. Don't forget that.
But you should really check the indexes that are defined on that particular table. If you're query doesn't use an optimized index for that query, you are already loosing time.
Maybe you can compile your program with xref option. Look for 'whole-index' clauses in the resulting xref file...
Don't know how you're report is build : but for example displaying a counter while you're query is running takes also a lot of time. If it's really necessary to display a counter while running, try to count in blocks : every 10000 records, display the counter, else : do nothing.
What is the output format of you're query. Excel? Other tool?