просто несколько советов. Убедитесь, что у вас есть правильные составные индексы для
Столбцы business_profile таблицы (iUserId, iCategoryId)
столбцы пользователей таблицы (iUserId, tiIsProfileSet, tiIsActive, tiIsDeleted)
таблица столбца business_categories (iCategoryId)
, тогда вам не следует использовать group by без функции агрегирования (если вам нужен отчетливый результат, добавьте предложение DISTINCT в select)
вы также можете использовать where (повторяющийся код di для расстояния), а не наличие для фильтра результата
SELECT
ROUND(6371*acos(cos(radians('52.28231599999999'))*cos(radians(bizprof.vLatitude))*cos(radians(bizprof.vLongitude)-radians('-1.584927'))+sin(radians('52.28231599999999'))*sin(radians(bizprof.vLatitude))),2) AS distance,
`bizcat`.`vCategoryName`,
`bizcat`.`iCategoryId`
FROM `business_profile` `bizprof`
LEFT JOIN `users` `u` ON u.iUserId = bizprof.iUserId
AND u.tiIsProfileSet = 1
AND u.tiIsActive = 1
AND u.tiIsDeleted = 0
LEFT JOIN `business_categories` `bizcat` ON bizcat.iCategoryId = bizprof.iCategoryId
WHERE ROUND(6371*acos(cos(radians('52.28231599999999'))*cos(radians(bizprof.vLatitude))*cos(radians(bizprof.vLongitude)-radians('-1.584927'))+sin(radians('52.28231599999999'))*sin(radians(bizprof.vLatitude))),2) >= 0
AND ROUND(6371*acos(cos(radians('52.28231599999999'))*cos(radians(bizprof.vLatitude))*cos(radians(bizprof.vLongitude)-radians('-1.584927'))+sin(radians('52.28231599999999'))*sin(radians(bizprof.vLatitude))),2) <= 10