Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет mumuntu ([info]mumuntu)
@ 2011-07-13 14:32:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Сортировка случайным образом в MySQL
Отличное решение проблемы ORDER BY RAND()


(Добавить комментарий)


[info]gmother_arised@lj
2011-07-13 09:00 (ссылка)
всё равно же всю таблицу перелопачивать. не лучше ли добавить таблице поле rnd с индексом, писать туда rand(), а выбирать по случайному диапазону нужного размера?

(Ответить) (Ветвь дискуссии)


[info]gmother_arised@lj
2011-07-13 09:25 (ссылка)
Проверил у себя:
CREATE TABLE `t_random` (
`rid` int(11) NOT NULL AUTO_INCREMENT,
`rnd` double NOT NULL,
PRIMARY KEY (`rid`),
KEY `rnd` (`rnd`)
) ENGINE=MyISAM AUTO_INCREMENT=8388609 DEFAULT CHARSET=utf8
Строк 8,388,608.

Запрос вида:
(SELECT * FROM `t_random` WHERE rnd > @rnd1 ORDER BY rnd LIMIT 1) UNION
(SELECT * FROM `t_random` WHERE rnd > @rnd2 ORDER BY rnd LIMIT 1) UNION
...
(SELECT * FROM `t_random` WHERE rnd > @rnd10 ORDER BY rnd LIMIT 1)
Время: 0.0015 сек.

Запрос вида:
SELECT * FROM `testrnd` WHERE rnd > @rnd ORDER BY rnd LIMIT 10
Время: 0.0006 сек.

Запрос товарища по ссылке
Время: 1.2635 сек.

ORDER BY RAND()
Время: 3.0540 сек.

(Ответить) (Уровень выше)


[info]alexclear@lj
2011-07-13 10:43 (ссылка)
Угу, в этом запросе всегда будет или table scan, или index range scan, это верно.
Конечно, лучше делать через UNION как у Вас ниже, но я не уверен что в случае лимита в 100 записей, например, запрос не превысит никакие ограничения по длине строки в MySQL. Надо будет попробовать.

(Ответить) (Уровень выше)

Odzywki
(Анонимно)
2011-07-15 19:06 (ссылка)
Hi

What do you thing about below diet supplement? I'm going to buy something good for muscle growth. Please give me a piece of advice.

[url=http://www.gaspari-nutrition.pl/gaspari-nutrition-cytolean-v2.html]Cytolean V2[/url]

(Ответить)