Для нас очень важно получить высокое время отклика для нашего PHP-скрипта, который запрашивает большую базу данных. По сути, он получает информацию о пользователе для пользователя, посетившего страницу. В db могут быть миллионы пользователей.
Мы бы вообще не пытались использовать пользовательские данные, если запись еще не находится в буфере пула InnoDB базы данных MySQL и использовать информацию только в том случае, если она присутствует в вышеупомянутом кеше.
Есть ли способ напрямую спросить Mysql/InnoDB, находится ли запись в кеше?
Гейзенберг говорит, что это будет неэффективно. (Хорошо, может быть, это плохой парафраз.)
В то же время у вас не будет миллионов пользователей, кабели Ethernet будут таять.
Что ты хочешь делать? Скажите "ваши данные не находятся в кеше, поэтому вы не можете получить доступ к своей учетной записи"? Я сомневаюсь.
Основная строка для миллиона пользователей может составлять 0,1 ГБ. Как крошечная машина?
Хорошо, я серьезно.
Нет, нет способа спросить, кэшируется ли строка в buffer_pool.
Я утверждаю, что нет необходимости спрашивать. Подумайте, что значит "кэшировать" (в механизме LRU). Пользователь, который вернется перед своей записью, окажется в кеше, найдет его в памяти; другие пользователи получат дополнительную задержку в миллисекундах для получения своих данных. И это предполагает, что у вас нет места для кэширования всего 0,1 ГБ все время (как только buffer_pool разогревается).
Как аналог, подумайте о новостных статьях. Все хотят "сегодняшних новостей", поэтому эти несколько строк остаются в кеше. Случайный запрос на новости за последний месяц занимает немного больше времени.
Большая картина... Пусть говорят, что весь ваш набор данных слишком велик для буферного пула. Тогда оптимизация заключается в минимизации обращений к диску. Если вместо этого у вас неэффективное сканирование таблиц (из-за отсутствия соответствующих индексов), все из-за слишком быстрого выхода из кеша.
Если вы хотите более подробно обсудить производительность веб-страницы php, дайте нам некоторые подсказки о размере набора данных, размере ОЗУ, типах запросов и т.д.