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

Optymalizacja MySQL ORDER BY na kalkulacji udostępnionej WHERE

Nie, obliczenie nie zostanie wykonane dwukrotnie, jeśli zostanie napisane dokładnie w ten sam sposób. Jeśli jednak Twoim celem jest poprawa wydajności Twojej aplikacji, możesz chcieć spojrzeć na szerszy obraz, zamiast koncentrować się na tym drobnym szczególe, który może dać co najwyżej dwukrotną różnicę. Poważniejszym problemem jest to, że Twoje zapytanie uniemożliwia efektywne wykorzystanie indeksów i spowoduje pełne skanowanie.

Sugerowałbym zmianę bazy danych tak, aby używać typu geometrii i utworzyć indeks przestrzenny na Twoich danych. Następnie możesz użyć MBRBWithin aby szybko znaleźć punkty, które leżą wewnątrz obwiedni twojego okręgu. Po znalezieniu tych punktów możesz przeprowadzić droższy test odległości tylko na tych punktach. Takie podejście będzie znacznie szybsze, jeśli Twoja tabela jest duża, a typowe wyszukiwanie zwraca tylko niewielką część wierszy.

Jeśli nie możesz zmienić modelu danych, nadal możesz poprawić wydajność, używając najpierw pola ograniczającego, na przykład WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60 . Zaznaczenie pola ograniczającego będzie w stanie użyćindeksu ale ponieważ indeksy R-Tree sąobsługiwane tylko dla typu geometrii będziesz musiał użyćstandardowego indeksu B-Tree który nie jest tak wydajny dla tego typu zapytań (ale nadal dużo lepsze niż to, co obecnie robisz).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql zlicza wiersze za pomocą filtrów w bazie danych o dużym natężeniu ruchu

  2. problem ze zdalną bazą danych android

  3. Znaleziono „OR 1=1/* wstrzyknięcie sql w mojej bazie danych biuletynów”

  4. java jdbc mysql connector:jak rozwiązać problem z rozłączeniem po długim okresie bezczynności

  5. MySQL z MAMP nie działa z OSX Yosemite 10.10