Поиск медленного местоположения
У меня проблема с функцией поиска, она работает правильно, но загрузка занимает 14-18 секунд, и это причиняет мне большую боль.
Это функция поиска, которую я использую:
$sql="select *,
( 3959 * acos( cos( radians( $lat ) ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians( $lng ) ) + sin( radians( $lat ) ) * sin( radians( `lat` ) ) ) ) AS distance
FROM postcodes,
details
WHERE `postcode`=postcodes.outcode
HAVING " . implode(" AND ", $searches)."
AND isactive='y'
ORDER BY `distance`";
Если у кого-то есть какие-либо предложения, они все будут приветствоваться
Я потратил больше времени, работая над этим, и точно понимаю, что делает запрос, прежде чем добавить дополнительную информацию.
Теперь это мой обновленный запрос, я попытался использовать левое соединение, но я не смог соединить таблицу почтовых индексов с таблицей cardetails, и когда я перевернул ее, столбцы cardetails, где все отображаются нулевыми.
SELECT "column names",
( 3959 * acos( cos( radians( $lat ) ) * cos( radians( `lat` ) ) * cos( radians(
`lng` ) - radians( $lng ) ) + sin( radians( $lat ) ) * sin( radians( `lat` ) ) ))
AS distance
FROM details
inner JOIN car_postcodes ON details.postcode = postcodes.outcode AND
distance < 100 AND payment='y' AND expired='n' ORDER BY
details.price
Это резко сократило время, затрачиваемое на выполнение запроса (примерно до 6 секунд), поэтому мне все еще нужно его улучшить.
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу использовать псевдоним столбца "расстояние" для измерения расстояния между пользователем и полем в таблице. Как я не могу использовать псевдоним столбца в пределах, где предложение.
Ответ, который я, кажется, читал на многих других постах, - это дополнительный выбор,
1 ответ
Я не уверен, что вы делаете, но следующая строка подозрительна
FROM postcodes,details
Если я не ошибаюсь, это crossjoin
(если ваши таблицы большие, это просто умножит размеры и в итоге..., я просто не уверен, что вы пытаетесь сделать здесь)