What's the difference between $user login and access?
The access field is updated in Drupal's session write handler _drupal_session_write. This means it is potentially updated at every page request. If you look at the source code, you'll see that the access field is, by default, only updated every 180 seconds. This interval can be changed by setting the session_write_interval Drupal variable.

// Likewise, do not update access time more than once per 180 seconds.
if ($user-&gt;uid &amp;&amp; REQUEST_TIME - $user-&gt;access &gt; variable_get('session_write_interval', 180)) {
  db_update('users')
    -&gt;fields(array(
    'access' =&gt; REQUEST_TIME,
  ))
    -&gt;condition('uid', $user-&gt;uid)
    -&gt;execute();
}