sql >> Database teknologi >  >> RDS >> Sqlserver

Rækkefølgen af ​​en SQL Select-sætning uden Order By-sætning

Nej, den adfærd kan man ikke stole på. Rækkefølgen bestemmes af den måde, forespørgselsplanlæggeren har besluttet at opbygge resultatsættet på. simple forespørgsler som select * from foo_table vil sandsynligvis blive returneret i den rækkefølge, de er gemt på disken, som kan være i primær nøglerækkefølge eller den rækkefølge, de blev oprettet, eller en anden tilfældig rækkefølge. mere komplekse forespørgsler, såsom select * from foo where bar < 10 kan i stedet returneres i rækkefølgen af ​​en anden kolonne, baseret på et indeks læst, eller efter tabelrækkefølgen for en tabelscanning. endnu mere komplicerede forespørgsler med multiple where betingelser, group by klausuler, union s, vil være i den rækkefølge, planlæggeren beslutter er mest effektiv at generere.

Rækkefølgen kan endda ændre sig mellem to identiske forespørgsler bare på grund af data, der har ændret sig mellem disse forespørgsler. en "hvor"-sætning kan være tilfreds med en indeksscanning i én forespørgsel, men senere indsættelser kunne gøre denne betingelse mindre selektiv, og planlæggeren kunne beslutte at udføre en efterfølgende forespørgsel ved hjælp af en tabelscanning.

For at sætte en finere pointe på det. RDBMS-systemer har mandat til at give dig præcis hvad du bad om, så effektivt som muligt. Denne effektivitet kan antage mange former, inklusive minimering af IO (både til disk såvel som over netværket for at sende data til dig), minimering af CPU og at holde størrelsen af ​​dens arbejdssæt lille (ved at bruge metoder, der kræver minimalt med midlertidig lagring).

uden en ORDER BY klausul, vil du ikke have spurgt præcist for en bestemt rækkefølge, og så vil RDBMS'et give dig de rækker i en eller anden rækkefølge, der (måske) svarer til et eller andet tilfældigt aspekt af forespørgslen, baseret på hvilken algoritme RDBMS'et forventer at producere dataene hurtigst.

Hvis du interesserer dig for effektivitet, men ikke bestiller, skal du springe ORDER BY over klausul. Hvis du bekymrer dig om ordren, men ikke effektiviteten, skal du bruge ORDER BY klausul.

Da du faktisk holder af BEGGE brug ORDER BY og tuner derefter omhyggeligt din forespørgsel og database, så den er effektiv.



  1. Husk RAC-forekomster i Perf Tools

  2. MySQL returnerer kun én række

  3. psql:server lukkede uventet forbindelsen

  4. Split strenge på den rigtige måde – eller den næstbedste måde