2010-10-25 1 views
0

У меня есть jquery roller/scroller, который отображает фрагменты записей, возвращаемых из моего запроса таблицы базы данных «Полезные подсказки». Я хочу сохранить скроллер примерно до 15 записей, но не всегда первые 15 записей.Помогите получить или отобразить случайные записи в ColdFusion из запроса MySQL?

Это более эффективно, чтобы написать запрос, как:

SELECT * 
FROM table 
ORDER BY RAND() 
LIMIT n 

которая возвращает случайный результат или я вернуть весь запрос и есть мой ColdFusion компонент обслуживать до случайного числа результатов запроса?

Будущее моего скроллера будет включать случайные записи из моей таблицы «Товары для продажи», поэтому мне нужно помнить об этом.

ответ

4

Я согласен с тем, что возврат большого набора значений, который не будет использоваться для Coldfusion, является пустой тратой ресурсов, которые никогда нельзя окупить.

Но будьте осторожны с использованием MySQL's RAND() function for ordering - once you're over 100,000 records, it doesn't scale well (see graph), и вы должны look at using alternatives.

+0

Итак, я посмотрел на другое сообщение из ссылки. Можете ли вы помочь мне понять, почему этот способ более эффективен? И благодарю вас. Это просто ответ, который я искал. Я действительно хотел рассмотреть масштабируемость в долгосрочной перспективе. – Ofeargall

+0

Пренебрежение, замечательная статья в первой ссылке объясняет это красиво. Мои извинения. – Ofeargall

+0

Хорошая статья о проблемах масштабирования @OMG Ponies. +1 – Leigh

1

Возвращение всего набора результатов и их выброса большинства из них определенно будет менее эффективным.

Когда вы переходите к данным из других таблиц, вы можете запустить другой запрос, как тот, который у вас есть, а затем перетасовать результаты вместе в ColdFusion.

Для полноты картины, что-то, как это возможно, но слишком медленно, чтобы быть практичным:

(SELECT * FROM table1) 
UNION 
(SELECT * FROM table2) 
ORDER BY RAND() 
LIMIT 30 
1

Если вы не кэширует относительно небольшой и статический запрос, как правило, более эффективен для рандомизации записи на стороне базы данных. Таким образом, вы каждый раз извлекаете 15 записей, а не все записи в таблице.