I agree that temperature and crush are the biggest factors, but I think some of you guys are a bit confused about the crush part. The idea is to CRACK the grain, not mill it into flour. By splitting the husk without completely grinding it up you allow it to act as a filter for the converted sugars to be easily extracted. Gains in efficiency by increased milling only go so far. As long as it's tight enough not to allow whole uncrushed grains through you're good.
Mash pH is another big factor in efficiency. It is influenced by the grain bill itself, water chemistry, and temperature. You can estimate it using various formulas and spreadsheet programs, or measure it with strips or a meter. So....
-1st get ur temp right, 146 to 158 depending on desired fermentability.
-2nd examine your CRUSH closely. It's called a "crush" for a reason, there shouldn't be any whole grains, but not too much fine powdery stuff either. Most LHBSS and online retailers these days give a pretty good crush.
-3rd and most complicated, get to know your water profile and its effect on mash pH. Get a water report or have your source water tested. Wardlabs.com makes it easy and affordable to know for sure what your water contains. With some inexpensive "salts" (powdered minerals) you can custom make the perfect water for every recipe. This will not only increase efficiency, but make your beer taste better too!!