Use query->set or make new query?

If you can alter a query before it runs, then do so and save the database some work. You might be able to alter the query with query->set() and if not you can use the posts_where, posts_fields, etc filters. It is hard to say whether any of that is best for you without more information.

Edit:

Another question, what kind of ‘page’ is this loading on? Here is my guess: you created a ‘Page’ from wp_admin->Pages, and probably assigned a custom built page template. If that is the case you probably can’t mess with the main query as its job is going to be to load the ‘Page’ you created, which means you seem to be on the right track with creating the new query.