You have to make sure you aren't doing full table scans on any big table. Indexes are your friend.
Sql hasn't changed much in say, the last ten years. Newer books aren't going to help more than older ones.
The less joins the better without taking other things into consideration.
Duplicating data in tables is a bad idea. Not necessarily for performance reasons, but because every time you change that data you will have to remember to change it in more than one place.
There are other databases out there other than mssql and mysql that may improve your performance more than what you can change with schemas and sql querys.
Finally, if it is fast enough just leave it. There is a big difference between queries that get hit once a minute and a thousand times a second.
PL/I -- "the fatal disease" -- belongs more to the problem set than to the solution set. -- Edsger W. Dijkstra, SIGPLAN Notices, Volume 17, Number 5