sql >> Database >  >> RDS >> Mysql

MySQL ORDER BY optimaliseren op een berekening gedeeld met WHERE

Nee, de berekening wordt niet twee keer uitgevoerd als deze op exact dezelfde manier is geschreven. Als het echter uw doel is om de prestaties van uw toepassing te verbeteren, wilt u misschien naar het grotere geheel kijken in plaats van u te concentreren op dit kleine detail, dat een verschil van hoogstens een factor twee kan opleveren. Een ernstiger probleem is dat uw zoekopdracht efficiënt gebruik van indexen verhindert en zal resulteren in een volledige scan.

Ik raad je aan om je database zo te wijzigen dat je het type geometrie gebruikt en een ruimtelijke index op uw gegevens. Dan kunt u MBRWithin om snel de punten te vinden die binnen het selectiekader van uw cirkel liggen. Als je die punten eenmaal hebt gevonden, kun je je duurdere afstandstest alleen op die punten uitvoeren. Deze aanpak zal aanzienlijk sneller zijn als uw tabel groot is en een typische zoekopdracht slechts een klein deel van de rijen oplevert.

Als u het gegevensmodel niet kunt wijzigen, kunt u de prestaties toch verbeteren door eerst een selectiekader te gebruiken, bijvoorbeeld WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60 . De begrenzingsvakcontrole kan een index gebruiken, maar omdat R-Tree-indexen alleen worden ondersteund op het type geometrie, moet u de standaard B-Tree-index gebruiken die niet zo efficiënt is voor dit type zoekopdracht (maar nog steeds veel beter dan wat u momenteel doet).



  1. Database-e-mail instellen in SQL Server (SSMS)

  2. Configureer SQL Server Always ON-beschikbaarheidsgroepen tussen twee synchrone replica's. Deel 2

  3. hoe maak ik een unieke php-pagina voor elke rij in een mysql-database?

  4. Is Microsoft Access nog steeds relevant in 2020?