Yes you should execute MySQL queries asynchronously. There might be a few exceptions though. The time it takes to execute a query is usually just a very small fraction of a second, so it's fine if you're executing queries synchronously on startup. I know of some servers that run MySQL queries synchronously and still maintain a good TPS because the MySQL server is hosted on the same system that runs PMMP. Maybe you too could run queries synchronously if you fall in the same category, but any slow queries will get you! Async tasks for each query might solve this issue but by using async tasks, you might worsen the overall execution time. You'll have to create a new MySQL connection for each async task besides executing the query(ies). You can solve the issue of recreating mysql connections by creating a Thread dedicated to handle your queries. This might be somewhat tricky but luckily there's a virion which does just that: https://github.com/poggit/libasynql.
Yes, but if you want to fetch the query result, you need to specify a callback which should get called after the query has executed.