У меня есть эта таблица (ЛИЦА) с 25M строками:MySQL Случайных строк в окрестностях
ID int(10) PK
points int(6) INDEX
some other columns
Я хочу, чтобы показать случайные строки пользователя 4, которые несколько близко друг к другу в точках. Я нашел этот запрос после некоторого поиска и настройки для генерации случайных строк, что впечатляет быстро:
SELECT person_id, points
FROM persons AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(person_id)
FROM persons)) AS id)
AS r2
WHERE r1.person_id>= r2.id and points > 0
ORDER BY r1.person_id ASC
LIMIT 4
Так что я запрашиваю это на PHP. Это дает мне большие и быстрые результаты (менее 0,05 секунды при нагревании). Но эти строки действительно просто случайны (с по крайней мере 1 балл с points > 0
). Я хотел бы показать несколько строк, которые немного близки, не обязательно каждый раз, но предположим, что я делаю этот запрос с лимитом 50 и выбираю случайную строку в PHP и 3 ближайших строках (на основе точек) рядом с ним. Я думаю, вам нужно будет отсортировать результат, выбрать случайную строку и показать строки после/до нее. Но я понятия не имею, как это сделать, поскольку я совершенно новичок в PHP.
Любых предложения, все отзывы приветствуются :)
запрос идет от 0.05 сек до 2.6213 сек. –
. Тогда дело в оптимизации таблицы, есть ли у вас индекс по точкам? –
Да, у него есть индекс на нем –