Я провел тонну исследований по этому вопросу, но не могу найти ответ, который подходит для моей ситуации.
Я управляю веб-сайтом, где информация о 10000 продуктов хранится в MySQL база данных. Это число постоянно увеличивается и в итоге может получить до 20,30 или 40000 товаров.
Я занимаюсь редизайном сайта, и как часть этого я хочу показать 10 случайных товаров из таблицы, в которой хранятся товары. В идеале я хочу добавить нумерацию страниц, чтобы вы, если хотите, могли прокручивать все 10000 продуктов - но проблема разбивки на страницы не возникает.
Я не могу найти эффективный способ получения случайных строк из MySQL стол. Я часто упоминал о RAND (), но он очень медленный с чем-то более 100 строк. Я пробовал такие вещи, как генерация случайного числа на основе количества записей и извлечение по нему - но это не учитывает, если строка удалена, и тогда она не найдет результат. Это также означает, что мне придется выполнить инструкцию 10 раз для 10 случайных строк.
Я думал о сохранении всех строк в массиве, а затем вытягивал 10 случайных строк. Но также кажется неэффективным хранить минимум 10000 строк в массиве каждый раз, когда пользователь заходит на эту страницу.
У кого-нибудь есть какой-нибудь совет относительно наилучшего способа сделать это? Я знаю, что здесь не было никакого реального кода, но это потому, что у меня его нет. Каждый метод, который я пробовал, не делает то, что мне нужно, или очень медленный.
Любой совет будет оценен: (
РЕДАКТИРОВАТЬ; SQL запрос, который я выполняю, который принимает 18 секунд с Рандом () - это:
SELECT Title,Price,Img,Seller,Positive,Negative,Neutral,Glowing,PD,STOCK,StoreItems.ItemURL,Currency,Verified, BTC, ETH, LTC, PayPal, Stripe, Stores.Verified FROM Stores JOIN StoreItems On Stores.StoreID = StoreItems.StoreID INNER JOIN Promotions ON StoreItems.ItemURL = Promotions.ItemID INNER JOIN Gateway ON StoreItems.ItemURL = Gateway.ItemURL WHERE Stores.Verified = 'true' ORDER BY RAND() LIMIT 5