Я должен не согласиться с zerkms. Тот факт, что MySQL имеет систему кеширования (на самом деле ее несколько), не означает, что оптимизировать доступ к базе данных не имеет смысла. QuSQL Cache в MySQL великолепен, но все же имеет ограничения:
- не подходит для больших наборов данных
- запросы должны быть идентичны (символ за символом)
- он не поддерживает подготовленные операторы или запросы с использованием пользовательских функций, временных таблиц или таблиц с привилегиями уровня столбца
- результаты кэша очищаются при каждом изменении таблицы, независимо от того, затронут ли набор результатов
- , если он не находится на том же компьютере, что и веб-сервер, он по-прежнему подвергается ненужным сетевым издержкам
Даже с удаленным сервером Memcached примерно на 23% быстрее, чем MQC . А используя объектный кеш APC, вы можете получить улучшение на 990% по сравнению с использованием только MQC.
Таким образом, существует множество причин для кэширования наборов результатов базы данных вне MySQL Query Cache. В конце концов, вы кешируете данные результатов локально в переменной PHP, когда вам нужно обращаться к ним несколько раз в одном и том же скрипте. Так почему бы вам не распространить это на несколько запросов, если набор результатов не изменился?
И то, что сервер достаточно быстрый, не означает, что вам не следует стремиться писать эффективный код. Не так уж много усилий, чтобы кэшировать результаты базы данных - особенно, когда ускорители типа APC и Memcached были разработаны именно для этой цели. (И я не отклонил бы этот вопрос как такую «странную идею», когда некоторые из крупнейших сайтов в Интернете используют Memcached в сочетании с MySQL .)
Тем не менее, zerkms верен в том смысле, что вы должны сначала получить результаты, а затем вы можете кэшировать данные, используя APC или Memcached. Тем не менее, существует другой вариант кэширования результатов запроса вручную, который заключается в использовании плагина кэширования результатов запроса Mysqlnd . Это клиентский кеш результатов MySQL-запросов.
Плагин кэширования результатов запросов Mysqlnd позволяет вам прозрачно кэшировать ваши запросы, используя APC, Memcached, sqlite или указанный пользователем источник данных. Однако этот плагин в настоящее время имеет то же ограничение, что и MQC, в том, что подготовленные операторы не могут быть кэшированы.