How to avoid url conflict when defining menu items, and make sure path without wildcards will be used in favor of path with %?
Assuming you are using Drupal 7:

Order matters only a bit - menu_router_build() saves all path into the {menu_router} table just the way they are set. But there are no guarantees database will return elements in that order. Logic to decide which menu item should be executed is in menu_get_item().

Actual query is:

$router_item = db_query_range('SELECT * FROM {menu_router} WHERE path IN (:ancestors) ORDER BY fit DESC', 0, 1, array(':ancestors' =&gt; $ancestors))-&gt;fetchAssoc();


As you can see, fitting elements are ordered by fit column, most specific first.

As you can see in actual _menu_router_build(), $fit gets initially set to 0 for each menu item:

foreach ($callbacks as $path =&gt; $item) {
  $load_functions = array();
  $to_arg_functions = array();
  $fit = 0;


It means it shouldn't be possible for the order of menu elements in hook_menu() to affect order of routing. Actual code is a bit complicated to understand, but elements specific should have higher fit than elements with '%' in them. As the comment in code says: // If there is no %, it fits maximally.