Bir sütun, id
ve 3,3 milyon giriş içeren bir tablo var tmp_drop_ids
. Her 200 girişte bir şeyler yapıp masanın üzerinde yinelemek istiyorum. Bu kodu vardır: Bu ilk başta, iyi çalışırpostgresql: offset + limit çok yavaş olsun
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)
, (~ 0.15s tmp tablo oluşturmak için) ama mesela bazen yavaşlatacaktır Yaklaşık 300 bin biletle bu tmp tablosunu oluşturmak için 11-12 saniye sürdü ve yine 400k civarında. Temelde güvenilmez gibi görünüyor.
Bu sorguları diğer sorgularda kullanacağım, bu yüzden bunların bir tmp tablosunda olması için en iyi yeri buldum. Bunun gibi sonuçlarla yinelemek için daha iyi bir yol var mı?
Tmp_drop_ids dizinlendiniz mi? UNIQUE INDEX CREATE tmp_drop_ids_id_uidx ON tmp_drop_ids (id); – filiprem
@filiprem: Evet – Claudiu