मेरे पास एक कॉलम tmp_drop_ids
एक कॉलम, id
और 3.3 मिलियन प्रविष्टियों के साथ एक तालिका है। मैं टेबल पर फिर से शुरू करना चाहता हूं, हर 200 प्रविष्टियों के साथ कुछ कर रहा हूं। मैं इस कोड है:postgresql: ऑफसेट + सीमा बहुत धीमी हो जाती है
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 तालिका उत्पन्न करने के लिए), लेकिन यह कभी कभी जैसे धीमी हो जाएगी, लगभग 300k टिकटों ने इस टीएमपी टेबल को उत्पन्न करने के लिए 11-12 सेकेंड लगाना शुरू किया, और फिर लगभग 400k। यह मूल रूप से अविश्वसनीय लगता है।
मैं उन प्रश्नों का उपयोग अन्य प्रश्नों में करूँगा, इसलिए मुझे एक टीएमपी टेबल में रखने के लिए सबसे अच्छी जगह मिली। क्या इस तरह के परिणामों के माध्यम से पुन: प्रयास करने का कोई बेहतर तरीका है?
क्या आपके पास tmp_drop_ids अनुक्रमित है? अद्वितीय INDEX tmp_drop_ids_id_uidx बनाएं tmp_drop_ids (आईडी) पर; – filiprem
@ फ़िलिप्रम: मैं हाँ – Claudiu