1. Если я сказал - выкинуть join, транзакции, EXPLAIN и не удалять никаких объектов, то это так на 95% (не надо столь буквально придираться к словам, во всем нужна мера). Я же исхожу из того, что народ не в теме. Поэтому и не делаю таких приписок. Когда вы научитесь - сами поймете, когда транзакция реально нужна, а когда крайне необходимо ее выкинуть, чтобы производительность на порядки повысилась. EXPLAIN нужен, но очень, очень редко. Практически нет нужды пользоваться в силу простых запросов и на практике программисты им не пользуются. Они бывает просто индекс забудут добавить - это да, косяки возможны. И то проект не падает, а только подтормаживать начинает =)
Почему не нужен explain? Потому, почти все запросы - это выборка по primary key из заведомо небольших таблиц (архитектура требует сделать так, чтобы они были в рамках разумного), либо в 20% случаях select по дополнительным индексам. Да, для 20% sql запросов можно применить Explain для самоконтроля, но и без него очевидно, какие индексы нужно сделать.
2. Совершенно верно. Как только я это говорю, начинается вой - мол это дорого, не реально, кучу серверов купить. Все не так. Никаких серверов не надо. Никаких доп. денег не надо. Лишнего времени не надо. Просто нужно по иному программировать (вернее, оперировать данными). На обучение - да, придется потратить и время, и деньги. Почему я это утверждаю? Потому, что мы клепаем кучу проектов по одинаковым паттернам. С нуля делаем шардинг и т.д. Мы еще ни разу не поменяли архитектуру проектов, только новые таблички создаем в базе под новый функционал.