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, ломаю голову что можно придумать? Альтернативу дабы не давать нагрузку
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
Drages, elasticsearch
благодарю за ответ а можно пожалуйста подробнее хотя бы в 2 словах
Drages, поисковый модуль по базе.
Почему будет грузить?
Мне кажется нагрузки как таковой не будет
Мне кажется нагрузки как таковой не будет
Litput (16.12.2017 в 21:04)
Почему будет грузить?
Мне кажется нагрузки как таковой не будет
Почему будет грузить?
Мне кажется нагрузки как таковой не будет
как это не будет? Сервер будет лопатить все 1000000 строк дабы выдать 1
Drages, Смысли?
Рандом выбирает любое значение из кол-ва строк и ищет эту строку
Рандом выбирает любое значение из кол-ва строк и ищет эту строку
Litput (16.12.2017 в 21:12)
Drages, Смысли?
Рандом выбирает любое значение из кол-ва строк и ищет эту строку
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");
Что скажите?
$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
ты себе льстишь
рандом выбирает одну строку, он ничего не лопатит
ты себе льстишь
рандом выбирает одну строку, он ничего не лопатит