Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выбор записей из таблицы Mysql случайно
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Выбор записей из таблицы Mysql случайно

Страниц (1): [1]
 

1. mshdn - 03 Февраля, 2010 - 15:51:12 - перейти к сообщению
Выбор записей из таблицы Mysql случайно

Нужно максимально быстро выбрать из таблицы Mysql случайным образом 10 записей.
Известный вариант
SELECT * FROM таблица WHERE условие ORDER BY RAND() LIMIT 0,10
работает, но на больших таблицах торомозит.

Есть ли вариант одним запросом( без кода PHP) ( или сложным запросом)
добиться большой скорости на емких таблицах?
2. Viper - 03 Февраля, 2010 - 15:59:55 - перейти к сообщению
mshdn для начала если записей много нужно указывать вместо * названия полей. и... таблица с индексами?
3. PeleWin - 13 Февраля, 2010 - 17:02:34 - перейти к сообщению
Запрос с условием "ORDER BY RAND()" тормозит потому, что при каждом сравнении записей значение RAND() вычиляется заново.

Чтобы ускорить выполнение запроса, предварительно можно выполнить фильтрацию записей, тоже по случайному условию. Уменьшив количество исходных записей в 10 раз можно надеяться на уменьшение времени выполнения более, чем в 10 раз.

Пример для таблицы с 60 тысячами записей:

SELECT *
FROM table
ORDER BY RAND()
LIMIT 0, 30
Отображает строки 0 - 29 (57,850 всего, запрос занял 2.7433 сек.)

SELECT *
FROM table
WHERE RAND () < 0.1
ORDER BY RAND()
LIMIT 0 , 30
Отображает строки 0 - 29 (5,872 всего, запрос занял 0.0992 сек.)
4. valenok - 14 Февраля, 2010 - 10:39:02 - перейти к сообщению
два вычислений рэнда можно сократить в одно

SELECT RAND() as 'R'
WHERE 'R' <0.1
ORDER BY 'R'

 

Powered by ExBB FM 1.0 RC1