Ho una tabella tmp_drop_ids
con una colonna, id
e 3,3 milioni di voci. Voglio scorrere il tavolo, facendo qualcosa con ogni 200 voci. Ho questo codice:postgresql: offset + limite diventa molto lento
LIMIT = 200
for offset in xrange(0, drop_count+LIMIT, LIMIT):
print "Making tmp table with ids %s to %s/%s" % (offset, offset+LIMIT, drop_count)
query = """DROP TABLE IF EXISTS tmp_cur_drop_ids; CREATE TABLE tmp_cur_drop_ids AS
SELECT id FROM tmp_drop_ids ORDER BY id OFFSET %s LIMIT %s;""" % (offset, LIMIT)
cursor.execute(query)
Questo funziona benissimo, in un primo momento, (~ 0.15s per generare la tabella tmp), ma rallenterà di tanto in tanto, per esempio circa 300k biglietti ha iniziato a prendere 11-12 secondi per generare questo tavolo TMP, e ancora circa 400k. Sembra fondamentalmente inaffidabile.
Userò questi ID in altre query, quindi ho pensato che il posto migliore per trovarli fosse in una tabella tmp. C'è un modo migliore per scorrere attraverso risultati come questo?
Hai indicizzato tmp_drop_ids? CREATE UNICO INDICE tmp_drop_ids_id_uidx ON tmp_drop_ids (id); – filiprem
@filiprem: sì sì – Claudiu