Веб-сайт, которым я должен управлять, - это поисковая система для работника (стиль желтой страницы)
Я создал такую базу данных:
People: <---- 4,000,000 records
id
name
address
id_activity <--- linked to the activites table
tel
fax
id_region <--- linked to the regions table
activites: <---- 1500 activites
id
name_activity
regions: <--- 95 regions
id
region_name
locations: <---- 4,000,000 records
id_people
lat
lon
Таким образом, в основном запрос, с которым у меня медленная проблема, состоит в том, чтобы выбрать всех «рабочих» вокруг выбранного города (выбирается пользователем)
Созданный мною запрос полностью работает, но для возврата результатов требуется 5-6 секунд ...
В основном я делаю выбор в расположении таблицы, чтобы выбрать весь город в определенном радиусе, а затем присоединяюсь к таблице людей
SELECT people.*,id, lat, lng, poi,
(6371 * acos(cos(radians(plat)) * cos(radians(lat)) * cos(radians(lng) - radians(plon)) + sin(radians(plat)) * sin(radians(lat)))) AS distance
FROM locations,
people
WHERE locations.id = people.id
HAVING distance < dist
ORDER BY distance LIMIT 0 , 20;
Мои вопросы:
- Хорошо ли разработана моя база данных? Я не знаю, будет ли хорошей идеей иметь 2 таблицы с 4 000 000 записей в каждой. Можно ли делать выбор?
- Мой запрос плохо оформлен?
- Как я могу ускорить поиск?