Je voudrais savoir comment optimiser le SQL suivant pour permettre à mon serveur de se charger plus rapidement et de consommer moins? Je dois calculer la distance de rayon pour un code postal américain pour obtenir le résultat, comme 50 milles d'un code postal particulier (en utilisant la latitude et la longitude pour calculer) et pour obtenir combien d'autres données (par ex.) de ma base de données. Une fois le résultat obtenu (par exemple 350 lignes de codes postaux différents dans un rayon de 50 miles à partir d'un code postal particulier), je dois les transmettre à une autre requête pour compter le nombre total de lignes et l'afficher en un moi de lire. Voici un exemple de ma requête:Comment optimiser mon SQL dans le serveur?
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;
Espérons que je n'ai pas fait mal, il affiche un résultat correct (350 lignes), mais je besoin d'un moyen optimisé pour il fonctionne parce que ce SQL m'a donné une utilisation élevée du processeur charger. Quand je n'EXPLIQUER pour cette requête, il affichage suivant:
+----+-------------+-------+--------+------------------+---------+---------+----------------------------+------+------------------------------+
| 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)
maintenant, d'explication ci-dessus, la « Sélectionner les tables optimisés loin » dans EXTRA est une bonne chose? S'il vous plaît veuillez me montrer une optimisation SQL le plus parfait pour faire cette requête.