A few elements that I think contribute to long standups:
* A very large team (I've been in a marged team of 14 people once...)
* Getting too much into technical details: don't do that; have your technical discussions after the standup with only the relevant people
* People sharing their opinion (frustration) about blocking issues and that developing into a discussion. Again, leave it until after the standup.
When standups drag on for too long, it's time for the scrum master to step in and get people to keep it short.