Solve camera motion in Blender: exact camera data or refinement?
Both.

Start with the known variables.
If you know focal length and sensor size put those in before tracking or before solving.

To determine lens distortion shoot a distortion chart or something that has straight lines (read: How to determine lens undistortion values for motion tracking?) and determine the lens k1, k2, k3 and optical center as accurately as possible.

Having done that you should give you good results. Note however that the focal length of a lens in is hardly ever the one stated on the lens. A 25mm lens might be a 23.845 lens or a 26.421 lens in reality, for example, and the effective Field of View might change depending on the focus distance or "breathing" of the lens, or it might be different depending on what portion of the sensor or the projected lens image the camera is actually using (if the sensor is "windowing", or if you are using a full frame lens on a cropped sensor, for example). So "refining" might alter your focal length values and make them be closer to the mathematical/optical characteristics of your particular lens in the real world.

Just for completeness. Blender uses algorithms based on OpenCV, usually even without any user input, it will determine the values for the field of view, quite well. Why would you want to input your own values then? Because the combination of lens and sensor size that blender guesses might not be the same as what your camera uses. Given that blender only knows about Field of View, and assigns the lens length based on the given (or default) sensor size. Knowing the correct lens and sensor might make a difference to match the correct depth of field when you are integrating CG and Video.

For a comprehensive post on tips for motion tracking read:

How can I get better results when doing camera motion tracking?