Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Query Бавна, когато използвате Order By с функция за изчисляване на разстоянието между две точки (дължина, ширина)

Опции:

  1. Включете сортиране във вашата дефиниция/логика на съхранената процедура. Ако вашият извикващ SQL изберете в рамките на вашата съхранена процедура, извършете сортирането и ограничението там . - Това означава, че няма да създавате 10 000 реда в съхранената процедура, само за да ги използвате. Освен това, ако таблицата има индекси, оригиналното сортиране в SQL може да бъде много по-бързо.

  2. Проверете дали в таблицата ви се използва индексиране. - Индексите ще доведат до по-бързо извършване на сортирането при избор на таблицата.

Моля, предоставете ни дефиницията на функцията, ще бъде по-лесно да ви помогнем допълнително.

И накрая, опитайте се да преместите поръчката си и да я ограничите директно във вашата функция, вместо да ги правите по-късно. Вашата функция може да върне 10-те резултата директно сортирани и готови. Ако искате, направете две функции – едната, която връща пълните резултати, и една, която ги връща ограничени и сортирани.

Актуализация:

След като видите вашата функция, става очевидно, че се опитвате да поръчате по изчислена стойност. Подреждането по изчислени стойности е изключително бавно, както е споменато също в:

Опитвам се да мисля как бихте могли да „предварително обработите/поръчате“ вашите данни въз основа на col1 или col2, за да ускорите окончателното подреждане на вашите резултати. Ако col1 и col2 са колони на таблицата и funResult е математическа функция, която може да бъде изобразена на графика, една от двете има по-голям ефект върху връщаната стойност на функцията....

И накрая, ако col1 и col2 са колони на myTable, не е необходимо да използвате съхранена функция, но можете да правите заявки с, но това няма да има голяма разлика... Основният ви проблем е подреждането по изчислена функция:

SELECT rowId, ((col1-INPUT_CONST)*2)+(col2*3) AS funResult
FROM myTable
ORDER BY funResult DESC
LIMIT 10

Актуализация 2:

След като изрових проблема за сортирането да се изчисли разстоянието, открих, че това е зададено и решено много ефективно на връзката по-долу. Във връзка със сортирането по изчислена стойност, тъй като вашето сортиране по изчислена стойност е по своята същност бавно. Вижте следните две връзки за допълнителна помощ:

Накрая, най-близкото до отговора ви е следното: https://stackoverflow.com/a/4180065/1688441



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IllegalArgumentException:Типът не може да бъде нулев

  2. Как да вмъкнете данни за подреждане от многоизмерен масив

  3. Коя версия на MySQL е съвместима с Airflow версия 1.10?

  4. mysql брои само за различни стойности в обединена заявка

  5. MySQL Как да INSERT INTO таблица с подзаявка SELECT, връщаща няколко реда?