APDs will usually run much slower than the BEx query itself. I've faced this problem in the past and there are a few alternatives you can try
- Try to split the APD into multiple APDs, each of which runs the same query with different filter criteria (variable values). Then put all those APDs in a single chain. By doing this you would reduce the amount of data returned by each individual APD
- You could also explore the Query-as-a-Datasource feature if you are in 7.3+. See the doc below for details