Loading...
PHP/MySQL | Задача php
$r = $db->query("SELECT * FROM `users` ORDER BY RAND() LIMIT 1");
if($r -> num_rows > '0'){
while($account = $r->fetch_assoc())
{

Есть выборка 1 строки через ORDER BY RAND(), но это очень хороша на начальном этапе, и очень плохо в будущем где кол-во строк будет например 1000000 очень будет грузить сервер Mysql, ломаю голову что можно придумать? Альтернативу дабы не давать нагрузку
Drages, elasticsearch
Anton Metronome (16.12.2017 в 20:58)
Drages, elasticsearch

благодарю за ответ а можно пожалуйста подробнее хотя бы в 2 словах
Drages, поисковый модуль по базе.
Почему будет грузить?
Мне кажется нагрузки как таковой не будет
Litput (16.12.2017 в 21:04)
Почему будет грузить?
Мне кажется нагрузки как таковой не будет


как это не будет? Сервер будет лопатить все 1000000 строк дабы выдать 1
Drages, Смысли?
Рандом выбирает любое значение из кол-ва строк и ищет эту строку
Litput (16.12.2017 в 21:12)
Drages, Смысли?
Рандом выбирает любое значение из кол-ва строк и ищет эту строку


походу ты не понимаешь о чем идет речь, если в таблице Users 1000000 записей то ORDER BY RAND() будет лопатить все 1000000 запросов прежде чем выдаст случайную 1 строку, сервер ляжет при таких запросах пользователями
Написал такой вариант что скажите?

$r = $db -> query("SELECT f.`id` FROM `users` f JOIN ( SELECT rand() * (SELECT max(id) from `users` WHERE `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot') AS max_id ) AS m WHERE `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' and f.id >= m.max_id LIMIT 1");

Что скажите?
1000000

ты себе льстишь

рандом выбирает одну строку, он ничего не лопатит
Онлайн: 3
Время:
Gen. 0.1189
(c) Bym.Guru 2010-2025