У меня есть система, которая будет возвращать всех пользователей из базы данных и упорядочивать результаты по минимальному расстоянию от ссылочного почтового индекса.
Например: пользователь заходит на сайт, вводит почтовый индекс, и онверните ему всех остальных пользователей, которые находятся ближе к его почтовому индексу (в порядке возрастания)
Как я делаю это сейчас и почему это проблема?
Система содержит большечем 30 миллионов пользователей и их почтовые индексы.Я извлекаю всех пользователей в определенном штате и городе (сужает набор данных примерно до 10000).
Вот где на самом деле возникает проблема.Теперь все результаты, отправленные MySQL (10 000) строк в PHP, отправляются в библиотеку калькуляторов почтовых индексов, которая вычисляет это расстояние между базовым почтовым индексом и почтовым индексом пользователя - 10000 раз.Затем упорядочивает результат по ближайшему почтовому индексу.
Как видите, это очень плохо оптимизированный код.И 10000 записей пройдены дважды.Не говоря уже о количестве оперативной памяти, которую каждый httpd-процесс занимает только для передачи данных туда и сюда mysql.
Что я хотел бы спросить здесь у гуру, что в любом случае можно оптимизировать?
У меня есть несколько собственных идей, но я не уверен, насколько они эффективны.
Попробуйте выполнить весь расчет и упорядочение почтового индекса в самом mysql.и верните нумерованное количество строк.Для этого мне нужно переместить расстояние между логикой вычисления почтового индекса в хранимую процедуру.Таким образом, я предотвращаю обработку 10000 записей в PHP.Тем не менее, проблема все еще существует.Мне не нужно рассчитывать расстояние для уже рассчитанных почтовых индексов (для 2 пользователей, имеющих одинаковый почтовый индекс).
Во-вторых, как мне упорядочить строки в MySQL, используя хранимую процедуру?
Что вы, ребята, думаете?Это хороший способ?Могу ли я ожидать повышения производительности с помощью этого?У вас есть другие предложения?
Я знаю, что этот вопрос огромен, и я действительно ценю время, которое вы потратили на чтение до конца.Мне бы очень хотелось услышать ваши мысли по этому поводу.