SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.11.2009 11:07:20

Maxz
Участник
Откуда: Екатеринбург
Зарегистрирован: 02.11.2009
Сообщений: 5

order by rand()

Есть таблица, строки которой нужно выводить в php-страницу каждый раз в разном порядке. Слышал, что на больших таблицах rand() сильно тормозит. Планируется, что в таблице будет больше 100 тысяч записей - это уже большая таблица, или еще нет? И какие есть варианты для ускорения?

Неактивен

 

#2 02.11.2009 13:09:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Неактивен

 

#3 02.11.2009 19:11:45

Maxz
Участник
Откуда: Екатеринбург
Зарегистрирован: 02.11.2009
Сообщений: 5

Re: order by rand()

мне не по одной строке надо, а все, с постраничной разбивкой (допустим, по 50 штук на страницу)
идентификаторы не по порядку, вернее, могут периодически возникать пропуски штук по 100-200

Неактивен

 

#4 02.11.2009 19:16:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: order by rand()

И при этом в случайном порядке? И при этом дублироваться не должны?
Ну тогда SELECT id ORDER BY RAND(), запомнить в сессии, и выводить постранично.

Но вообще, не могу себе представить, кому может понадобиться такая организация
данных.

UPD: Кстати, может оказаться полезным не выбирать сразу все строки, а выбирать
первую страницу, запоминать id, потом выбирать вторую (если спросят). Есть шанс,
что все данные выбирать не прийдется.

Неактивен

 

#5 02.11.2009 19:25:47

Maxz
Участник
Откуда: Екатеринбург
Зарегистрирован: 02.11.2009
Сообщений: 5

Re: order by rand()

Это большой каталог товаров от разных магазинов, нужно, чтоб они выводились не в алфавитном порядке, а всегда по-разному, чтоб магазины были в одинаковых условиях (разумеется, когда не выбрана сортировка по цене). Другого способа организовать в голову не приходит.
Когда посетитель находится внутри какой-нибудь категории товара - там и обычный rand() сработает, не так уж много товаров. Но когда в корневом разделе - там нужно выводить полный список с постраничной разбивкой :-(
Как вариант - может раз в час генерировать табличку с идентификаторами в случайном порядке?

Неактивен

 

#6 02.11.2009 19:42:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: order by rand()

Ну, например, так. В любом случае — тогда запоминать per-user не нужно, это упрощает ситуацию.
Кстати, обычно все товары не выводят, в этом нет смысла, выведите одну страницу.

Неактивен

 

#7 02.11.2009 19:43:18

Maxz
Участник
Откуда: Екатеринбург
Зарегистрирован: 02.11.2009
Сообщений: 5

Re: order by rand()

а остальные как и куда?

Неактивен

 

#8 02.11.2009 19:47:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: order by rand()

А остальные не выводить. А когда человек уже определится с тем, какой товар его
интересует, — тогда уже постранично.

Неактивен

 

#9 02.11.2009 20:18:19

Maxz
Участник
Откуда: Екатеринбург
Зарегистрирован: 02.11.2009
Сообщений: 5

Re: order by rand()

Кстати да! На главной выводить самые популярные товары - и все!
Спасибо за идею!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson