On point 2, my understanding of MySQL interacting with PHP is that PHP makes the db request but MySQL finishes when it finishes. If you refresh the page, you could have two expensive queries running. One that won't go anywhere and one that will go to the page refresh.
On point 1, Do queries for unused filters are run each time a report is run?. Your queries will run the way you write them. Maybe set up a default value for Select2 to minimise the initial run.
For example, I use the DatePicker extensively. I set my defaults like below to set my start date 2 days ago and my end date two days into the future.
protected function defaultParamValues()
{
return array(
"startDatePicker"=>date("Y-m-d 00:00:00", time() - 60 * 60 * 48),
"endDatePicker"=>date("Y-m-d 23:59:59", time() + 60 * 60 * 48),
);
}
protected function bindParamsToInputs()
{
return array(
"startDatePicker",
"endDatePicker",
);
}
Alternatively, you can have a conditional statement in your PHP controller to check for a value in your Select2. If it's there set one SQL statement. If it's not, set a different one that doesn't use it.