лучше не значит быстрееНее... Тут без калькулятора сразу не сказжешь...
Правильно! Теперь тогда определяем понятие "лучше", и глядишь, ответ на вопрос сам собой найдется.лучше не значит быстрее![]()
Один запрос грузит сервер на 0.12 секунды. Три запроса грузят на 0.006. В каком случае сервер загружен больше?не сильно ли нагрузит сервер большее количество запросов?
3 запроса вместо 1... то есть, грубо говоря, выбор между 300 и 100 запросами в секундунет, три запроса не загрузят сервер.
другое дело что можно попытаться оптимизировать тот который один
SELECT `id`
FROM `USERS`
ORDER BY `score` DESC, `id` ASC
LIMIT 0, 100
SELECT `score`
FROM `USERS`
ORDER BY `score` DESC
LIMIT ' . ($count - 1) . ', 1
SELECT @n:=@n+1 AS `place`, `id`, `score`
FROM (
SELECT `id`, `score`
FROM `USERS`
WHERE `score` >= ' . $score . '
ORDER BY `score` DESC
LIMIT ' . $limit . '
) as z2,
(SELECT @n:=0) AS z1
ORDER BY `score` DESC, `id` ASC
категорически не согласен.лучше один запрос, правильно закешированный.
нет, в твоем случае, грубо говоря, это выбор между 8 и 166 запросами в секунду.3 запроса вместо 1... то есть, грубо говоря, выбор между 300 и 100 запросами в секунду
SELECT `score`
FROM `USERS`
ORDER BY `score` DESC, `id` ASC
LIMIT 99, 1
на самом деле можно обойтись и двумя запросами, но часть расчетов придется сделать, например, на php... то есть выбрать записей с 1 по 100, вогнать в массив и выбрать последний элемент (он не обязательно будет сотым)tolstys
я вот смотрю твои запросы, читаю, но никак не догоняю, о чем это?
пол задачи понял, узнать количество очков у последнего из ТОП. и сдается впечатление, что это один запрос!
а что дальше, непойму переменная @n что это?, зачем так сложно!PHP:SELECT `score` FROM `USERS` ORDER BY `score` DESC, `id` ASC LIMIT 99, 1
попробуй сказать что ты ищешь
CREATE TABLE IF NOT EXISTS `score` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`score` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `score` (`score`)
) ENGINE=MyISAM;
INSERT INTO `test`.`score` (`id`, `score`) VALUES
(NULL, CAST(rand() * 1000 as unsigned)),
(NULL, CAST(rand() * 1000 as unsigned)),
(NULL, CAST(rand() * 1000 as unsigned)),
(NULL, CAST(rand() * 1000 as unsigned)),
...
;
/* выбираем из топ 100 */
select min(id) as id, min(score) as score
from (
/* выбираем топ 100 */
select id, score
from score
order by score desc, id asc
limit 100
) as top100
group by score
limit 1