ActiveRecord это очень удобный и полезный инструмент и его можно и нужно использовать, одна из замечательнейших частей фреймворка, делающих разработку действительно быстрой и легкой.
Если возникают проблемы с производительностью:
1) Во всех проектах используем:
CProfileLogRoute с настройкой
CDbConnection.enableProfiling=true
Расскажет много полезного.
2) Если видим lazy Loading — не забываем добавлять в with("") нужных релейшинов, используем together() принудительно где нужно.
3) Если используем findAll() на большом количестве записей — используйте CDbCriteria.select и перечисляйте только необходимые колонки, это поможет
значительно повысить производительность.
Рекомендую детально изучить изнутри — как работает
CActiveRecord,
CActiveFinder
Используйте расширения типа
XDebug для детального профайлинга проекта.
Основные потери производительности происходят внутри метода
CActiveRecord.populateRecord — посмотрите — что происходит внутри.
4) Все редкообновляемые данные очень легко кэшировать связкой:
CTimestampBehavior + CDbCacheDependency('SELECT MAX(update_time) .... where...');
Если таблица редко обновляется, то и этот запрос будет отрабатывать мгновенно. Mysql тоже сам кэширует результаты таких запросов.
В результате — мест, где приходится отказываться от ActiveRecord остается очень мало.
Скорость отдачи страниц держим на уровне не более 0.1 с.
Если у Вас будут действительно высокие нагрузки, Вас врятли спасет один только отказ от ActiveRecord:
Посмотрите:
Yii: устройство ActiveRecord и Шардинг
Шардинг MySQL на Yii Framework
Также задумываем для одного проекта попробывать
www.yiiframework.com/extension/yiimongodbsuite/ с auto-sharding