Как стать автором
Обновить

Комментарии 11

Возможно, кэширование запросов структуры дало бы практически такое же ускорение, и не содержало бы явного минуса Вашего решения.
Не проверял, но думаю все равно будет чуть-чуть медленнее
Разница небольшая, но кэш можно инвалидировать, тем самым сохраняя актуальную версию структуры без вмешательства.
Не думаю что вы ощутите «медленность» обращения к кешу. Это первая мысль, которая приходит в голову. В любом случае, этот запрос реализирован в одном из методов модели, потому можете просто переопределить этот метод, чтобы он информацию тянул с кэша, а не с базы.

За попытку плюс конечно. Но я бы такое решение не внедрял.
Думаю профилирование профилирование запросов на стороне сервера, выявление узких мест и их замена на plain SQL решила бы эту задачу. Хотя уж года три, как другим фреймворком пользуюсь.
Yii Framework позволяет кэшировать схему БД, думаю это наилучшее решение.
Я решал эту проблему переопределением метода ORM:

public function list_columns()
{
	if ( Cache::instance()->get( 'table_columns_' . $this->_object_name ) )
	{
		return Cache::instance()->get( 'table_columns_' . $this->_object_name );
	}

	Cache::instance()->set( 'table_columns_' . $this->_object_name, $this->_db->list_columns( $this->table_name() ) );

	// Proxy to database
	return $this->_db->list_columns( $this->table_name() );
}
А если я обновил структуру, а он все тянет из кеша?
Думаю при разработке проекта кеш нужно отключить, а на продакшене можно включить кеширование.
Мелочь конечно, но 2 раза повторяется $this->_db->list_columns( $this->table_name() )
А так да, лаконично и работает :)
я об этом писал тут, хабраюзер ButscH верно решил проблему.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.