![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| console |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 2 Всего: 3 |
Есть таблица... допустим там 200 записей. Мне нужно выбрать 5 случайных... Как это осуществить?
|
|||
|
||||
| BobiKK |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 655 Регистрация: 1.12.2005 Где: Essen, Deutschlan d Репутация: 4 Всего: 16 |
Быстро, но оптимизации никакой. Для таблицы в 200 записей, однако, не критично |
|||
|
||||
| console |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 2 Всего: 3 |
Спасибо, 200 не предел... будет много записей, как оптимизировать?
|
|||
|
||||
| BobiKK |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 655 Регистрация: 1.12.2005 Где: Essen, Deutschlan d Репутация: 4 Всего: 16 |
Оптимизировать тяжко. Можете почитать дискуссию здесь:
http://www.mysqlperformanceblog.com/2006/0...e-optimization/ Варианты там тоже имеются |
|||
|
||||
| console |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 2 Всего: 3 |
Составление оптимальных запросов целое искусство...
|
|||
|
||||
| console |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 2 Всего: 3 |
Здесь приведена хорошая статья по выборке случайных значений. Примеры идут для выбора одного случайного. В конце статьи автор предлагает пример функции для выборки произвольного количества.
Вопрос: не могут ли совпадать значения? В MySQL reference пишется, что RAND() генерит числа от 0 до 1. В примере подсчитал, что кол-во знаков после запятой = 14. Насколько безопасно использование такого кода?
|
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Еще как могут, там никто и не обещает, что рандомные значения будут уникальные. Для гарантированной уникальности я бы немного модифицировал хранимку
Дополнительная проверка нужна, что бы не было зацикливания, если параметр cnt больше общего количества строк. Это сообщение отредактировал(а) sTa1kEr - 19.9.2007, 15:17 |
|||
|
||||
| ewolf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 8 Всего: 18 |
Вот что-то сомнительно мне, что данная хранимая процедура будет производительней одного SQL запроса
|
|||
|
||||
| sTa1kEr |
|
||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Зависит от структуры таблицы, количества записей в ней и количества необходимых рандомных значений, т.к. ORDER BY RAND() пересортировывает всю таблицу используя filesort. Для 100-200 записей, вероятно, эта хранимка действительно будет дольше работать, а вот для 1000000 ... Если очень хочется одним запросом, то можно ускорить этот запрос следующим образом
Это сообщение отредактировал(а) sTa1kEr - 19.9.2007, 16:26 |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |