Я хотел бы знать, как оптимизировать следующий SQL, чтобы мой сервер быстрее загружался и пользовался низким уровнем использования?Как оптимизировать мой SQL-сервер?
Мне нужно рассчитать радиус радиуса для почтового индекса США, чтобы получить результат, например, в 50 милях от определенного почтового индекса (с использованием широты и долготы для расчета) и получения количества других данных (например, других почтовых индексов) из моей базы данных.
Как только я получу результат (например, получил 350 строк разных ZIP-кодов в пределах 50 миль от определенного почтового индекса), мне нужно передать их в другой запрос, чтобы подсчитать полные строки и отобразить их простым и одним результатом для мне читать. Вот пример моего запроса:
SELECT count(*)
FROM
(SELECT b.ID, ROUND((acos(sin(3.142/180*32.91336) * sin(3.142/180*z.latitude) + cos(3.142/180*32.91336) * cos(3.142/180*z.latitude) * cos((3.142/180*z.longitude) - (3.142/180*-85.93836))) * 3959),2) AS distance
FROM zipcode2business.accountants b LEFT JOIN zipcodeworld.storelocator_us z ON b.ZIPCODE = z.ZIP_CODE
WHERE z.latitude != 32.91336 AND z.longitude != -85.93836
AND b.STATE='AL'
HAVING distance between 0 AND 50)
as total;
Надеюсь, я не сделал неправильно, он показывает правильный результат (350 строк), но мне нужен оптимизированный способ работает, потому что это SQL дал мне высокую загрузку процессора загружать. Когда я EXPLAIN для этого запроса, то отобразить следующее:
+----+-------------+-------+--------+------------------+---------+---------+----------------------------+------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+------------------+---------+---------+----------------------------+------+------------------------------+
| 1 | PRIMARY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
| 2 | DERIVED | b | ref | ZIPCODE,STATE | STATE | 4 | | 3900 | Using where |
| 2 | DERIVED | z | eq_ref | PRIMARY,LAT_LONG | PRIMARY | 9 | zipcode2business.b.ZIPCODE | 1 | Using where |
+----+-------------+-------+--------+------------------+---------+---------+----------------------------+------+------------------------------+
3 rows in set (0.20 sec)
Теперь из приведенных выше объяснений, «Выбор таблицы оптимизированной прочь» в EXTRA хорошая вещь? Пожалуйста, любезно покажите мне одну наиболее совершенную оптимизацию SQL для выполнения этого запроса.