PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'ordine in vista garantisce l'ordine di selezione?

Non puoi contare sull'ordine delle righe in nessuna query che non ha un esplicito ORDER BY clausola. Se esegui una query su una vista ordinata, ma non includi un ORDER BY clausola, sii piacevolmente sorpreso se sono nell'ordine giusto e non aspettarti che accada di nuovo.

Questo perché Query Optimizer è libero di accedere alle righe in modi diversi a seconda della query, delle statistiche della tabella, del conteggio delle righe, degli indici e così via. Se sa che la tua query non ha un ORDER BY clausola, è libero di ignorare l'ordine delle righe in modo (tosse) per restituire le righe più rapidamente.

Leggermente fuori tema . . .

L'ordinamento non è necessariamente identico su tutte le piattaforme anche per le regole di confronto note. Capisco che l'ordinamento di UTF-8 su Mac OS X sia particolarmente strano. (Gli sviluppatori PostgreSQL lo chiamano rotto .) PostgreSQL si basa su strcoll(), che a quanto ho capito si basa sulle impostazioni locali del sistema operativo.

Non mi è chiaro come PostgreSQL 9.1 gestirà questo. Nella versione 9.1, puoi avere più indici, ciascuno con regole di confronto diverse . Un ORDER BY che non specifica un confronto utilizzerà solitamente il confronto delle colonne della tabella di base sottostante, ma cosa farà l'ottimizzatore con un indice che specifica un confronto diverso da una colonna non indicizzata nella tabella di base?