To zapytanie powinno dać mi najbliższy element do podanych :x
, :y
we współrzędnych kartezjańskich.W jaki sposób można zoptymalizować tę kwerendę pod względem szybkości realizacji?
SELECT `type`
FROM `mapgen_centers`
ORDER BY SQRT(POW((:x - `x`), 2) + POW((:y - `y`), 2))
LIMIT 1
Obecnie trwa 0.002s średnio co jest w porządku, ale mam wrażenie, to może być lepiej, zwłaszcza dlatego, że obecnie wystrzelić ją bardzo często i często, tak że cała wykonanie pali skryptów do kilku minut.
można (a nawet jeśli, jak) to być optymalizowane poprzez jakichkolwiek środków dostępnych w standardowej instalacji MySQL (procedury, funkcje, indeksy, konfiguracja ...)
możesz rozważyć dodanie kolumny z wynikiem wzoru: 'SQRT (POW ((: x - x), 2) + POW ((: y - y), 2)) 'i dodać indeks na nim – Stephan
Ale': x', ': y' zmienia się przy każdym wykonaniu? Jak utworzyć kolumnę z tą formułą, jeśli wartości nie są wcześniej znane? –
Czy naprawdę potrzebujesz użyć 'SQRT', ponieważ jest on używany tylko do sortowania? Czy nie jest tak, że kiedy (x'-x)^2 + (y'-y)^2 staje się wyższe, jego pierwiastek kwadratowy też jest wyższy? – iCantSeeSharp