You should use %ExecuteAsynch.

The %ExecuteAsynch method uses multiple DeepSee agents do to the work.

The %Execute method only uses only 1 process (the current process) to do all the work. This is why %Execute is slower than you saw with Analyer, which uses %ExecuteAsynch.

So change your code to this:

Set tSC = oMDX.%ExecuteAsynch(,,1)

Here is the method signature of %ExecuteAsync

method %ExecuteAsynch(Output pQueryKey As %String,
                      ByRef pParms,
                      pWait As %Boolean = 0) as %Status

The 3rd argument of 1 indicates that you want to wait until the query is completed before the method completes.

If you don't wait until the query is  complete (pWait = 0), then your code can proceeed without waiting for the query to complete.  Then you can later use the instance method %GetStatus or the classmethod %GetQueryStatus to check if the query is complete.