Change published status directly in database I want to change published status of nodes according certain criteria. So I directly modified 'status' column of 'node' table. But it seems to be not reflected when nodes are viewed or edited (I want to avoid using node_lodad() and node_save())

That is, if I change 'status' column value of a row in 'node' table, it does not reflected in when corresponding node opened in browser.

So, from where it takes the 'status' (publihed/unpublihed) value other than 'node' table?
You also need to change the status column in the node_revision table:

foreach (array('node', 'node_revision') as $table) {
  db_update($table)
    -&gt;fields(array('status' =&gt; 0))
    -&gt;condition('nid', $nid)
    -&gt;execute();
}


Notwithstanding any aggressive caching you might have in place, the effect should be immediate once you've run both those queries.

Drupal has plenty of these little nuances, which is why it's highly recommended to use the API functions rather than manipulating the database directly. Yes there's extra overhead, but you don't need to give things like the revisions table/caching a second thought as they're handled for you.