Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie MySQL Powolne podczas korzystania z funkcji Order By z funkcją obliczania odległości między dwoma punktami (długi, szeroki)

Opcje:

  1. Włącz sortowanie do definicji/logiki procedury składowanej. Jeśli wywołujący kod SQL wybierz w ramach procedury składowanej, wykonaj tam sortowanie i ograniczanie . — Oznacza to, że w procedurze składowanej nie będzie produkowanych 10 000 wierszy, tylko po to, aby je odwoływać. Ponadto, jeśli tabela ma indeksy, oryginalne sortowanie w ramach wyboru SQL może być znacznie szybsze.

  2. Sprawdź, czy w Twojej tabeli jest używane indeksowanie. - Indeksy spowodują szybsze sortowanie podczas wybierania w tabeli.

Podaj nam definicję funkcji, łatwiej byłoby Ci dodatkowo pomóc.

Na koniec spróbuj przenieść zamówienie i ograniczyć je bezpośrednio w swojej funkcji, zamiast robić to później. Twoja funkcja może zwrócić 10 wyników bezpośrednio posortowanych i gotowych. Jeśli chcesz, utwórz dwie funkcje - jedną, która zwraca pełne wyniki, a drugą, która zwraca je ograniczone i posortowane.

Aktualizacja:

Po obejrzeniu swojej funkcji staje się jasne, że próbujesz uporządkować według obliczonej wartości. Porządkowanie według obliczonych wartości jest bardzo powolne, jak również wspomniano w:

Zastanawiam się, jak można „wstępnie przetworzyć/zamówić” swoje dane w oparciu o col1 lub col2, aby przyspieszyć ostateczne uporządkowanie wyników. Jeśli col1 i col2 są kolumnami tabeli, a funResult jest funkcją matematyczną, którą można przedstawić na wykresie, jeden z nich ma większy wpływ na wartość zwracaną przez funkcję....

Na koniec, jeśli col1 i col2 są kolumnami myTable, nie musisz używać przechowywanej funkcji, ale możesz wykonywać zapytania, ale nie miałoby to dużej różnicy... Twoim głównym problemem jest porządkowanie według obliczonej funkcji:

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

Aktualizacja 2:

Po wykopaniu problemu z sortowaniem obliczonej odległości stwierdziłem, że zostało to poproszone i rozwiązane w bardzo sprawny sposób pod poniższym linkiem. W odniesieniu do sortowania według obliczonej wartości, ponieważ sortowanie według obliczonej wartości jest z natury powolne. Aby uzyskać dodatkową pomoc, zobacz następujące dwa łącza:

Na koniec najbliższa odpowiedź jest następująca: 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. Podzapytanie MySQL zwraca więcej niż jeden wiersz

  2. wybierz sumę z 2 tabel

  3. Jak połączyć aplikację Pythona z bazą danych online?

  4. Jak wybrać pierwszy i ostatni wiersz danych z wyniku mysql?

  5. MySQL 8 ignoruje długości całkowite