Možnosti:
-
Zahrňte třídění do definice/logiky uložené procedury. Pokud vaše volání SQL select v rámci vaší uložené procedury proveďte řazení a omezení tam . - To znamená, že nebudete produkovat 10 000 řádků v uložené proceduře, ale pouze je uchýlit. Pokud má tabulka indexy, původní řazení v rámci SQL může být také mnohem rychlejší.
-
Ověřte, že se v tabulce používá indexování. - Indexy způsobí, že vaše řazení bude při výběru na stole rychlejší.
Poskytněte nám prosím definici funkce, bylo by snazší vám dodatečně pomoci.
Nakonec se pokuste přesunout svou objednávku o a limit přímo ve vaší funkci, nikoli později. Vaše funkce může vrátit 10 výsledků přímo seřazených a připravených. Pokud chcete, vytvořte dvě funkce – jednu, která vrátí úplné výsledky, a jednu, která je vrátí omezené a seřazené.
Aktualizace:
Po zhlédnutí vaší funkce je zřejmé, že se snažíte řadit podle vypočítané hodnoty. Seřazení podle vypočítaných hodnot je extrémně pomalé, jak je také zmíněno v:
Snažím se přemýšlet, jak byste mohli „předběžně zpracovat/uspořádat“ svá data na základě col1 nebo col2, abyste urychlili konečné uspořádání vašich výsledků. Pokud jsou sloupce1 a sloupec2 sloupce tabulky a funResult je matematická funkce, kterou lze zobrazit v grafu, jedna z nich má vyšší vliv na návratovou hodnotu funkce....
A konečně, pokud col1 a col2 jsou sloupce myTable, nemusíte použít uloženou funkci, ale můžete se s ní dotazovat, ale to by neznamenalo velký rozdíl...Vaším hlavním problémem je řazení podle vypočítané funkce:
SELECT rowId, ((col1-INPUT_CONST)*2)+(col2*3) AS funResult
FROM myTable
ORDER BY funResult DESC
LIMIT 10
Aktualizace 2:
Po vyhrabání problému s řazením vypočítané vzdálenosti jsem zjistil, že toto bylo velmi efektivně dotazováno a vyřešeno na níže uvedeném odkazu. Ve vztahu k třídění podle vypočítané hodnoty je vaše třídění podle vypočítané hodnoty přirozeně pomalé. Další nápovědu naleznete na následujících dvou odkazech:
- http://www.mooreds.com/wordpress/archives/547 - "Optimalizace výpočtu vzdálenosti v dotazu mysql"
- Nejrychlejší cesta najít vzdálenost mezi dvěma zeměpisnými/délkovými body .
Nakonec, nejblíže k vaší odpovědi je toto: https://stackoverflow.com/a/4180065/1688441