How to make photos less grainy?

Hi, I own a nikon D3100, and whenever they appear on the camera, the photos are vibrant, not pixely, and un-grainy. But the minute I upload it to Facebook, the photo quality is ruined, EVEN if I press 'upload in high quality'.

Change the setting of your ISO, make it lower.

Re-size the picture.
Facebook compresses the pictures so they load faster.
and just fyi the internet uses 72 dpi

Shoot under lots of light and use the lowest ISO possible.

The problem is that you uploaded it to facebook. They compress the living crap out of photos to save server space and reduce load times, even if you say upload in high quality. Use Something like Flikr which doesn't butcher your photos.