Опции:
-
Включете сортиране във вашата дефиниция/логика на съхранената процедура. Ако вашият извикващ SQL изберете в рамките на вашата съхранена процедура, извършете сортирането и ограничението там . - Това означава, че няма да създавате 10 000 реда в съхранената процедура, само за да ги използвате. Освен това, ако таблицата има индекси, оригиналното сортиране в SQL може да бъде много по-бързо.
-
Проверете дали в таблицата ви се използва индексиране. - Индексите ще доведат до по-бързо извършване на сортирането при избор на таблицата.
Моля, предоставете ни дефиницията на функцията, ще бъде по-лесно да ви помогнем допълнително.
И накрая, опитайте се да преместите поръчката си и да я ограничите директно във вашата функция, вместо да ги правите по-късно. Вашата функция може да върне 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:
След като изрових проблема за сортирането да се изчисли разстоянието, открих, че това е зададено и решено много ефективно на връзката по-долу. Във връзка със сортирането по изчислена стойност, тъй като вашето сортиране по изчислена стойност е по своята същност бавно. Вижте следните две връзки за допълнителна помощ:
- http://www.mooreds.com/wordpress/archives/547 – „Оптимизиране на изчисляване на разстояние в mysql заявка“
- Най-бързият начин за намиране на разстояние между две широчини/дълги точки .
Накрая, най-близкото до отговора ви е следното: https://stackoverflow.com/a/4180065/1688441