Сколько в среднем, Ваш сайт делает запросов к базе данных, при загрузке одной страницы?
На wp зашел к ним на сайт, у них на главной - 3 запроса, а в просмотре категорий - 5 запросов. Работает мгновенно...
Разрабатываю сейчас свой сайт, и смотрю что получается до 10ти запросов при каждом запросе на страницу, думаю, не многовато ли
Есть запрос у меня, который выводит весь основной контент, индексы - проставлены, но в нем есть несколько JOIN-ов и подзапросов, читаю - что такие запросы очень тяжело идут...
Вот пример запроса
SELECT s.*,
( SELECT count(*) FROM `server_transitions` WHERE `server_id` = s.id ) AS `transitions`,
FROM `servers` s
LEFT JOIN `projects` p ON p.id = s.project_id
LEFT JOIN `games` g ON g.id = p.game_id
LEFT JOIN `vips` vip ON vip.id = s.vip_id
WHERE s.status = 1 AND p.game_id = $game_id
ORDER BY s.position ASC
LIMIT 0, 50
Смотря какой сайт. Бывает и по 20-30 обращений к БД на один запрос для сложных проектов (и это при хорошей оптимизации, когда информация в списках и прочих цикличных вещах вытаскивается одним запросом, а не несколькими десятками).
Другое вопрос в размере самой базы. Использовать запросы с JOIN'ами на больших таблицах не самый быстрый вариант. Лучше выполнять денормализацию данных или использовать сводные таблицы в таких случаях.
Запрос, который вы привели не оптимизирован. Советую сделать следующее:
count(*) на MyISAM не самые быстрые. Лучше хранить данные счетчика в промежуточной таблице, а при операциях, связанные с его увеличением/уменьшением вносить соответствующие изменения в эту таблицу.WHERE s.status = 1 AND p.game_id = $game_id во-первых, потенциально небезопасная. Оберните $game_id в кавычки. Во-вторых, для увеличения производительности лучше поменять местами условия поиска WHERE p.game_id = '$game_id' AND s.status = 1 (так мы сразу ищем строку по уникальному game_id, а не перебираем все варианты со status = 1, коих будет большинство).Сборка персонального компьютера от Artline: умный выбор для современных пользователей