Utilizzo di query SQL nei loop

0

È una cattiva idea? Ho bisogno di confrontare ogni voce. Valore chiave in un dizionario di stringhe su una tabella SQL. Se c'è una corrispondenza, quindi estraggo i dati da quella riga. Inizialmente usavo un ciclo foreach per interrogare ogni voce. Valore chiave. Mi è stato detto da qualcuno che farlo è una cattiva idea. È male perché sto facendo troppe domande? Ogni dizionario può contenere migliaia di valori (che probabilmente significano migliaia di query) ... Qualcuno può suggerire un modo migliore? (confronta il dizionario con un databile dei risultati?)

    
posta terbubbs 19.01.2015 - 20:54
fonte

3 risposte

11

Puoi utilizzare una clausola IN per questo.

SELECT someFields FROM yourDictionaryTable WHERE key IN (List of values)

Dovrai creare il tuo elenco di valori come una stringa con virgolette singole e virgole, come questa:

'value1', 'value2', 'value3'

Questo ti darà una singola query SQL ad alte prestazioni che restituirà il set di dati che desideri.

    
risposta data 19.01.2015 - 20:59
fonte
2

Sì, perché se hai migliaia di record, eseguirà migliaia di query che saranno pesanti sul database.

Ci sono 2 approcci a cui posso pensare per evitare questo,

  1. Usa nella dichiarazione come menzionato da Robert Harvey Una considerazione è che esiste un limite nei parametri che possono essere passati alla clausola IN in base al database. Quindi se hai più di questo importo, potresti voler dividere il tuo set di chiavi in poche posizioni.

  2. Utilizza una tabella temporanea per inserire le chiavi e aggiungerla alla tua tabella per ottenere un set di risultati

risposta data 20.01.2015 - 02:00
fonte
0

Non è sempre male inserire query nei loop, ma quando puoi esprimere la "logica del loop" in SQL stesso, farlo in questo modo è solitamente più efficiente e più leggibile.

In questo caso, puoi facilmente utilizzare una singola query con l'operatore IN (come ha detto Robert), e questo esprime ciò che stai effettivamente cercando di fare molto meglio di un ciclo for di query più piccole. Sia tu che lo SQL Query Optimizer ne beneficiate.

    
risposta data 19.01.2015 - 21:00
fonte

Leggi altre domande sui tag