Nee, op dat gedrag kan niet worden vertrouwd. De volgorde wordt bepaald door de manier waarop de queryplanner heeft besloten de resultatenset op te bouwen. eenvoudige zoekopdrachten zoals select * from foo_table
worden waarschijnlijk geretourneerd in de volgorde waarin ze op schijf zijn opgeslagen, wat in de volgorde van de primaire sleutel kan zijn of de volgorde waarin ze zijn gemaakt, of een andere willekeurige volgorde. complexere zoekopdrachten, zoals select * from foo where bar < 10
kan in plaats daarvan worden geretourneerd in de volgorde van een andere kolom, op basis van een index die is gelezen, of door de tabelvolgorde voor een tabelscan. nog uitgebreidere zoekopdrachten, met meerdere where
voorwaarden, group by
clausules, union
s, staan in de volgorde die de planner het meest efficiënt acht om te genereren.
De volgorde kan zelfs veranderen tussen twee identieke zoekopdrachten, alleen vanwege gegevens die tussen die zoekopdrachten zijn gewijzigd. een "where"-clausule kan worden voldaan met een indexscan in één zoekopdracht, maar latere invoegingen kunnen die voorwaarde minder selectief maken, en de planner zou kunnen besluiten om een volgende zoekopdracht uit te voeren met behulp van een tabelscan.
Om er een punt achter te zetten. RDBMS-systemen hebben het mandaat om u exact waar u om heeft gevraagd, zo efficiënt mogelijk. Die efficiëntie kan vele vormen aannemen, waaronder het minimaliseren van IO (zowel naar schijf als via het netwerk om gegevens naar u te verzenden), het minimaliseren van de CPU en het klein houden van de grootte van de werkset (met behulp van methoden die minimale tijdelijke opslag vereisen).
zonder een ORDER BY
clausule, hebt u niet precies gevraagd voor een bepaalde volgorde, en dus geeft het RDBMS je die rijen in een volgorde die (misschien) overeenkomt met een toevallig aspect van de zoekopdracht, op basis van het algoritme dat het RDBMS verwacht de gegevens het snelst te produceren.
Als je om efficiëntie geeft, maar niet om bestellen, sla dan de ORDER BY
over clausule. Als je de bestelling belangrijk vindt, maar niet de efficiëntie, gebruik dan de ORDER BY
clausule.
Omdat je echt om BEIDE geeft gebruik ORDER BY
en stem vervolgens uw zoekopdracht en database zorgvuldig af zodat deze efficiënt is.