Rerunning query in the same connection takes significantly longer
With that many rows, moving the results from the server to the client will be a significant part of the elapsed time.  Eliminate variablity in that part by wrapping your query in some way such as:

select
    count(*)
from (
    {your query here}
) as xx


This way the network transfer will be a minimal part of the elapsed time and you can eliminate it from your enquiries.