sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgsel Langsom ved brug af Bestil efter med funktion til at beregne afstanden mellem to punkter (lang, lat)

Valgmuligheder:

  1. Inkorporer sortering i din lagrede proceduredefinition/logik. Hvis dit kaldende SQL vælger inden for din lagrede procedure, udfør sorteringen og begrænsningen der . - Det betyder, at du ikke vil producere 10.000 rækker i den lagrede procedure, bare for at ty til dem. Hvis tabellen har indekser, kan original sortering inden for SQL også være meget hurtigere.

  2. Bekræft, at indeksering bruges i din tabel. - Indekser vil få dine sorteringer til at blive udført hurtigere, når du vælger på bordet.

Giv os venligst funktionsdefinitionen, det ville være nemmere at hjælpe dig yderligere.

Til sidst, prøv at flytte din ordre og begrænse direkte i din funktion i modsætning til at gøre dem senere. Din funktion kan returnere de 10 resultater direkte sorteret og klar. Hvis du vil, lav to funktioner - en der returnerer de fulde resultater og en der returnerer dem begrænset og sorteret.

Opdatering:

Efter at have set din funktion bliver det tydeligt, at du prøver at bestille efter en beregnet værdi. Bestilling efter beregnede værdier er ekstremt langsom som også nævnt i:

Jeg forsøger at tænke på, hvordan du kunne "forbehandle/bestille" dine data baseret på col1 eller col2 for at fremskynde den ultimative bestilling af dine resultater. Hvis col1 og col2 er kolonner i tabellen, og funResult er en matematisk funktion, der kan tegnes graf, har en af ​​de to en højere effekt på funktionen returværdi...

Endelig, hvis col1 og col2 er kolonner i minTabel, behøver du ikke at bruge en lagret funktion, men kunne forespørge med, men dette ville ikke gøre den store forskel...Dit hovedproblem er at sortere efter en beregnet funktion:

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

Opdatering 2:

Efter at have gravet efter problemet med sortering skal beregnes afstand fandt jeg ud af, at dette er blevet spurgt og løst i en meget effektivt på nedenstående link. I forhold til at sortere efter en beregnet værdi, som din sortering efter en beregnet værdi er det i sagens natur langsom. Se følgende to links for yderligere hjælp:

Til sidst er det tætteste på dit svar: https://stackoverflow.com/a/4180065/1688441



  1. MySQL geometriskrydsningspunkt producerer ikke-skærende resultater

  2. Databasen opdateres ikke automatisk med MySQL og Python

  3. Node.js looper synkront eller itererer over asynkrone sætninger

  4. er PDO::PARAM_INT overflødig?