The performance of an exact (or heuristic) solver on an instance will depend on some intrinsic characteristics, normally called features. And different solvers, or different configurations of a solver, will obtain different results on instances with different characteristics. For NP-hard problems, this might mean that an instance solved by solver X in a few minutes can take hours using solver Y, and the opposite situation can happen for another instance.
To know whether you should use X or Y to solve an instance, you can run the two algorithms in parallel and see which one terminates first, or you can try to look at the instance characteristics and predict which solver will terminate first. If you have to solve multiple instances, the second approach will save you a lot of time (hopefully).
For example, by knowing that an instance is "easy" you can choose to use an exact solver (ideally, you'll also be able to tell which solver to choose), while for an instance that is or looks like an "open" one you can save time and use a heuristic approach from the start.
In addition to the links provided by Marco Lübbecke in his answer, you can take a look at the Algorithm Selection library paper, this recent survey on algorithm selection, or this portfolio selector for SAT.