Я не думаю, что есть один ответ на это. Обычно это вопрос о том, как организовать ваши данные так, чтобы они использовали пространственную локализацию, присущую вашей проблеме.
Первая идея, которая возникнет у меня в голове, - это использовать сетку, назначить каждую точку квадрату и проверить выбор квадрата, в котором находится точка, и окружающих ее. Если мы говорим о бесконечных сетках, то используем хеш-значение квадрата, это даст вам больше очков, чем нужно (если у вас есть коллизии), но все равно уменьшит сумму на кучу. Конечно, это не сразу применимо к полигонам, это просто мозговой штурм. Возможный подход, который может привести к слишком большому количеству коллизий, будет состоять в том, чтобы ИЛИ все хэшированные значения вместе и выбрать все записи, в которых хэши AND с этим значением отличны от нуля (не уверен, возможно ли это в MySQL), возможно, вы захотите использовать большое хотя количество битов.
Проблема с этим подходом состоит в том, что если мы говорим, что сферические координаты (широта, обычно это делают длинные) являются сингулярностями, так как «квадраты» сетки сужаются по мере приближения к полюсам. Простой подход к этому ... не ставьте точки близко к полюсам ...:)