O que é melhor, anexando novos elementos por meio de funções DOM ou anexando strings com tags HTML?

Vi alguns métodos diferentes para adicionar elementos ao DOM. Os mais prevalentes parecem ser, por exemplo,

document.getElementById('foo').innerHTML ='<p>Here is a brand new paragraph!</p>';

o

newElement = document.createElement('p');
elementText = document.createTextNode('Here is a brand new parahraph!');
newElement.appendChild(elementText);
document.getElementById('foo').appendChild(newElement);

mas não tenho certeza das vantagens de fazer qualquer um. Existe uma regra prática sobre quando um deve ser feito em detrimento do outro, ou um deles está errad

questionAnswers(5)

yourAnswerToTheQuestion