How can I 'further' improve my table and queries
You don't need the nationality in the outer query.  Remove it, then:

INDEX(tnx_id, sku)  -- instead of just INDEX(txn_id)


That will let both queries be 'covered', as to be indicated by Using index in the EXPLAIN.

Won't it be 'correct' to include the date range in the inner query, too?  That would beg for adding INDEX(sku, tdate)

I don't see why the outer join to products failed to use the index.  Please change suitable fields to NOT NULL and be consistent about datatypes.  Shrink the INTs where practical, and add UNSIGNED where appropriate.  But make sure they are consistent across JOINs.

The 60M was to get you away from "swapping".  Can you see how much RAM is still free, and that you are doing no swapping?  If the is still some RAM, give part of it to the buffer_pool.

Is there a 1:1 relationship between id and trx_id?  If so, there are several more changes to suggest.