например: есть кеширование в самом mysql можно хранить время изменения в отдельной таблице - выборка будет одним быстрым запросом, а не набором более тяжелых.
Отслеживать изменения в таблицах можно с помощью триггеров. Либо использовать их для заполнения отдельной таблицы как предложил armadillo
Goryn Без использования волшебных бубнов типа тригеров и бла бла бла - никак. (Да и то, тригеры работают для базы, а кеш будет явно не в базе), вообщем забейте на это предложение. Кеш SQL запросов делается примерно так: * При SELECT надо проверять есть-ли кеш, и если его нету - создавать. Я лично делаю через memcache или XCache задаю TTL для него, что-бы он автоматом обновлялся через заданный интервал. * При INSERT, DELETE, UPDATE в коде вызывать функцию/метод удаления кеша - это необходимо в случае если обновление должно показатся незамедлительно везде (т.е. надо грохнуть все кеши, данные в которых зависят от делаемого действия). Лично я использую два подхода - с интервалом (не обновляю кеш сразу по изменении данных), т.к. вряд-ли кто-то заметит что данные обновились не сразу, а с задержкой в 2-3 минуты. Или когда при изменении данных грохаю кеш сразу там где нужно незамедлительное обновление данных (к примеру сессия пользователя - они у меня на memcache сидят). Всё это логика приложения.