Loading...
PHP/MySQL | Задача php
вывод одной строки идет limit 1 он не перелопачивает всех пользователей, так что расслабься, это тоже самое что если ты укажешь вывод своего персонажа с id=4444, сервер не будет перематывать всех пользователей до 4444 и потом только выведет значения твоего, так и тут rand() сделал дело выбрал одну строчку и всё
Drages (16.12.2017 в 22:27)
Написал такой вариант что скажите?

$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");

Что скажите?


Вот этот велосипед даст нагрузку больше чем rand(). Т ты не задумался о том что какого то id может не существовать?
Drages, ты лучше чтобы нагрузку уменьшить на сервер выводи не все знания таблицы, например ты делаешь вывод: SELECT * from users , тоесть все столбики таблицы users, а ты делай вывод такого типа SELECT id,nick,prava from , тоесть выводи только те значения, который потом будешь использовать, это хорошо влияет на скорость работы движка, особенно когда выводишь допустим только количество сообщений и вместе с этим весь текст сообщений лопатишь каждый раз, когда достаточно только id
Wins (16.12.2017 в 23:28)
Drages (16.12.2017 в 22:27)
Написал такой вариант что скажите?

$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");

Что скажите?


Вот этот велосипед даст нагрузку больше чем rand(). Т ты не задумался о том что какого то id может не существовать?


допустим ID всегда будет существовать, подскажи решение по проще, order by rand () limit 1 однозначно гиблый вариант?
Cymfakas (16.12.2017 в 23:20)
вывод одной строки идет limit 1 он не перелопачивает всех пользователей, так что расслабься, это тоже самое что если ты укажешь вывод своего персонажа с id=4444, сервер не будет перематывать всех пользователей до 4444 и потом только выведет значения твоего, так и тут rand() сделал дело выбрал одну строчку и всё



ну что ты рассказываешь? Сейчас добавил в таблицу 1000000 записей при использованиие order by rang limit 1 генерация страниц 0.980 сек, при том что если очистить до 1000 записей то скорость 0.003 сек чувствуешь разницу? или не понимаешь о чем идет речь?
Cymfakas (16.12.2017 в 23:20)
вывод одной строки идет limit 1 он не перелопачивает всех пользователей, так что расслабься, это тоже самое что если ты укажешь вывод своего персонажа с id=4444, сервер не будет перематывать всех пользователей до 4444 и потом только выведет значения твоего, так и тут rand() сделал дело выбрал одну строчку и всё

серьезно? кто такое сказал? документацию про rand() читали? про индексы?

вот запрос с limit 1, затронутых строк 90к

Изображение

------
52049_20171217015111.png (29.1 Kb)
Скачиваний: 95
Drages, https://ruhighload.com/post/Оптимизация+ORDER+BY+RAND%28%29
Статьи по этому поводу:
http://rmcreative.ru/blog/post/optimizatsija-order-by-rand
http://hudson.su/2010/09/16/mysql-optimizaciya-order-by-rand/
https://ruhighload.com/post/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%...ER+BY+RAND%28%29
Вообще то переворачивает все строки))
Пиши рандом через уникальный id , тогда лопатить не будет )

Думаешь поможет при больших обьёмах данных?
Онлайн: 5
Время:
Gen. 0.1148
(c) Bym.Guru 2010-2025