tolst
Новичок
Вопрос для ГУРУ PHP+MySQL (рандомный выбор)
Задача состаит вот в чем:
есть таблица к примеру вот:
далее запоняем её миллионом записей:
Теперь нужно выбрать несколько, к примеру 3 случайные записи, делаем выборку стандартным методом:
Данный SQL запрос работает более 2-х секунд, это согласитесь не есть гуд, нужно выбрать эти случайные записи как то иначе, так что бы было значительно быстрее, причем обязательно одним запросом!!!
в мысли приходит только вот что:
1) Использовать WHERE id IN(rand_id_1, rand_id_2, rand_id_3) - тогда запрос выполняется в разы быстрее, но как внутри одного запроса выявить эти случайные ID?
2) Использовать BETWEEN, тут опять же возникает вопрос, где же эти злополучные ранды брать внутри определенного промежутка ID
можно конечно использовать вложенный запрос (SELECT COUNT(*) FROM `random`), но это бляха муха тоже не совсем верно...
Просьба помогите, причем все нужно сделать в 1 запрос, таковы требования... это нечто типо теста...
Искал по форуму, находил подобные темы, но там нет ответа именно на эту задачу (в 1 запрос)...
Задача состаит вот в чем:
есть таблица к примеру вот:
CREATE TABLE `random` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
PRIMARY KEY (`id`)
);
далее запоняем её миллионом записей:
PHP:
<?php
for ($i = 0; $i < 1000000; $i++){
mysql_query("INSERT INTO `random` ( `id` , `name` ) VALUES ('', '" . rand(0, 1000000) . "')");
}
?>
Теперь нужно выбрать несколько, к примеру 3 случайные записи, делаем выборку стандартным методом:
SELECT * FROM `random` ORDER BY RAND() LIMIT 3
Данный SQL запрос работает более 2-х секунд, это согласитесь не есть гуд, нужно выбрать эти случайные записи как то иначе, так что бы было значительно быстрее, причем обязательно одним запросом!!!
в мысли приходит только вот что:
1) Использовать WHERE id IN(rand_id_1, rand_id_2, rand_id_3) - тогда запрос выполняется в разы быстрее, но как внутри одного запроса выявить эти случайные ID?
2) Использовать BETWEEN, тут опять же возникает вопрос, где же эти злополучные ранды брать внутри определенного промежутка ID
можно конечно использовать вложенный запрос (SELECT COUNT(*) FROM `random`), но это бляха муха тоже не совсем верно...
Просьба помогите, причем все нужно сделать в 1 запрос, таковы требования... это нечто типо теста...
Искал по форуму, находил подобные темы, но там нет ответа именно на эту задачу (в 1 запрос)...