sql >> Database >  >> RDS >> PostgreSQL

Garandeert bestellen door in zicht de volgorde van selecteren?

U kunt niet rekenen op de volgorde van rijen in een zoekopdracht die geen expliciete ORDER BY heeft clausule. Als u een geordende weergave opvraagt, maar u voegt geen ORDER BY . toe clausule, wees aangenaam verrast als ze in de juiste volgorde staan, en verwacht niet dat het nog een keer zal gebeuren.

Dat komt omdat de query-optimizer op verschillende manieren toegang heeft tot rijen, afhankelijk van de query, tabelstatistieken, rijtellingen, indexen, enzovoort. Als het weet dat uw zoekopdracht geen ORDER BY . heeft clausule, is het gratis om de rijvolgorde te negeren om (hoesten) de rijen sneller terug te geven.

Beetje off-topic . . .

De sorteervolgorde is niet noodzakelijk identiek op alle platforms, zelfs niet voor bekende sorteringen. Ik begrijp dat het sorteren van UTF-8 op Mac OS X bijzonder vreemd is. (PostgreSQL-ontwikkelaars noemen het gebroken .) PostgreSQL vertrouwt op strcoll(), waarvan ik begrijp dat het afhankelijk is van de landinstellingen van het besturingssysteem.

Het is mij niet duidelijk hoe PostgreSQL 9.1 hiermee zal omgaan. In 9.1, kunt u meerdere indexen hebben, elk met een andere sortering . Een ORDER BY die geen sortering specificeert, gebruikt meestal de sortering van de onderliggende kolommen van de basistabel, maar wat doet de optimizer met een index die een andere sortering specificeert dan een niet-geïndexeerde kolom in de basistabel?



  1. Hoe een een-op-veel-relatie op te slaan in de MySQL-database?

  2. Oracle FETCH FIRST 1 ROW met UNION ALL-instructie

  3. Oracle-cursor voor toewijzing

  4. SQL Server splitst CSV op in meerdere rijen