Ho una tabella di database con un campo stringa univoco e un paio di campi interi. Il campo stringa è in genere lungo 10-100 caratteri.Qual è il modo più efficiente per inserire migliaia di record in una tabella (MySQL, Python, Django)
Una volta ogni minuto ho il seguente scenario: Ricevo un elenco di 2-10 mila tuple corrispondenti alla struttura del record della tabella, ad es.
[("hello", 3, 4), ("cat", 5, 3), ...]
Ho bisogno di inserire tutte queste tuple al tavolo (ho verificato assumere nessuna di queste stringhe appaiono nel database). Per chiarimenti, sto usando InnoDB, e ho una chiave primaria auto-incrementale per questa tabella, la stringa non è il PK.
Il mio codice attualmente scorre questa lista, per ogni tupla crea un oggetto modulo Python con i valori appropriati, e chiama ".save()", una cosa in questo modo:
@transaction.commit_on_success
def save_data_elements(input_list):
for (s, i1, i2) in input_list:
entry = DataElement(string=s, number1=i1, number2=i2)
entry.save()
Questo codice è attualmente uno dei colli di bottiglia delle prestazioni nel mio sistema, quindi sono alla ricerca di modi per ottimizzarlo.
Ad esempio, potrei generare codici SQL contenenti ciascuno un comando INSERT per 100 tuple ("hardcoded" nell'SQL) ed eseguirlo, ma non so se migliorerà qualcosa.
Avete qualche suggerimento per ottimizzare tale processo?
Grazie
Buona domanda! Quindi, le migliori risposte sembrano essere la creazione di un file di testo o la generazione di una query SQL attraverso la concatenazione di stringhe? Questo è un po 'insoddisfacente! – JAL