I'm not sure I understand how the query optimizer can fix up a poor performing query just by letting it figure out the problem and fixing it. I've never seen that happen, so I just don't believe it is possible. Especially when I analyze the schema, think about what the query is doing. Realize what is wrong. Change the query and get immediate improvement in performance. Run a quick query and verify my query is 50 to a 1000 times faster. (Does the same thing, but aborts itself within seconds to not impact the production system.)
I then let the existing production code continue ineffectively cleaning up the data a few days, while I report back to the developement team about the pour performing query, how to fix it, and why it will fix it. They take my suggestion, apply it to their production code after doing their own tests.
About this time the "daily" update process is running 3 days straight before the job finishes. We stop the job, apply the updates and restart the job. It takes 3 hours to complete the updates to catch up with the backlog. The daily update runs in 1 hour.
Sorry, understanding the schema, optimizing the query to take advantage of the schema trumps a pour performing query every time.