Используй memcache или redis, чтобы каждый раз не ходить в БД за одними и теми же данными - должно существенно поднять производительность.
Для сайтов с миллионами посетителей используют мощные сервера или несколько серверов - вертикальное или горизонтальное масштабирование, как правило используется горизонтальное плюс те же redis, memcache, elastic search и т.п.
Memcache и redis это такие программы(службы), которые работают в фоне и позволяют сохранять данные в оперативной памяти в формате ключ:значение. Например
123: "Здесь какой то длинный текст полученный из БД"
. К этим данным доступ осуществляется быстрее чем к БД, т.к. данные находятся в оперативной памяти, но чтобы они туда попали нужно их туда записать из БД и потом можно пользоваться. У redis более богатые возможности, но начать можно c memcache. У memcache тоже очень большие возможности - можно почитать книжки на эту тему.
Вот мануал для php.
php.net/manual/ru/book.memcached.php
Работа с кэшем выглядит примерно так:
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
if (!($text = $m->get('my_text'))) { // Проверяем есть ли значение в кэше и если нет то идем в базу
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$text = Get_Data_From_DB(); // Получение каких нибудь данных из БД
$m->set('my_text', $text); // Установка значения в кэше
} else {
/* log error */
/* ... */
}
}
?>