У меня есть большая большая таблица (InnoDB), которая по существу имеет название местоположения с широтой и долготой местоположения.мой запрос выглядит примерно так:
SELECT columns FROM table
WHERE latitude BETWEEN latMin AND latMax
AND longitude BETWEEN longMin AND longMax
AND location LIKE '%mcdonalds%'
единственным индексом является первичный индекс для автоинкрементного столбца.
Я бы предпочел использовать InnoDB, поэтому FULLTEXT не является опцией
Один из вариантов, который я попробовал, - это добавление индексов к широте и долготе и выполнение
SELECT id FROM table WHERE
latitude BETWEEN latMin AND latMax
AND longitude BETWEEN longMin AND longMax
, тогда я делаю
$stringOfIds = implode(",",$result);
SELECT columns FROM table WHERE id IN ($stringOfIds)
AND location LIKE '%mcdonalds%'
Но это не очень масштабируемо, потому что результат $ может иметь тысячизаписей и занимает слишком много памяти
На данный момент я прибег к полному сканированию таблицы (первый запрос выше), но для каждого запроса требуется 0,5-1 секунда, поэтому любая помощь будет оценена.
Спасибо