Interrogazione dei dati con SQL vs. C # [duplicato]

0

Sto cercando di decidere chi ha ragione nel seguente argomento:

Come elaborare in modo efficace i dati in MSSQL? Qual è più veloce?

Opinione 1: le richieste di dati (questo è particolarmente vero per quelle complesse) devono essere gestite da query SQL e il risultato deve essere restituito al codice C # richiedente.

Opinione 2: in primo luogo, i dati grezzi dovrebbero essere richiesti da query SQL semplicistiche (SELECT * che coinvolgono tutte le tabelle interessate) e la selezione delle condizioni dovrebbe essere gestita da C # LINQ o impostare operazioni che coinvolgono elenchi, mappe, matrici e quant'altro, combinato con iterazioni e variabili locali. In questo modo, il sollevamento pesante avviene in memoria, rendendolo più veloce delle operazioni a livello di disco del server SQL.

Opinione 3: un mix intelligente di quanto sopra.

(Personalmente ritengo che Opinion 2 spieghi semplicemente come funziona Opinion 1, ovviamente dobbiamo sostituire i termini C #, set, cicli ecc. con i costrutti di basso livello utilizzati da SQL.)

    
posta stevie 12.01.2017 - 13:49
fonte

3 risposte

5

Opzione 3: un mix intelligente di server applicazioni e query SQL Server.

Entrambe le opzioni 1 e 2 sono dogmatiche e ciascuna ha ragionevoli eccezioni che dipendono da cose come:

  • Caricamento SQL Server
  • Caricamento del server delle applicazioni
  • Contesa sul lato SQL Server (attende, blocca ecc.)
  • Costi di licenza dei vari server (forse è più economico fare qualcosa su un server e non sull'altro)
  • Logica effettiva della query

In generale, è vero che più semplici sono le query, meno lavoro deve fare SQL Server, ma questo dipende tanto dalla progettazione del DB, da quali indici esistono, da quanti dati sono coinvolti e dalla relativa "convenienza" di le operazioni (considerazioni sul tempo e lo spazio, così come i costi effettivi - i costi dei server e il loro funzionamento)

Per quel che vale - a Stack Overflow facciamo 3.

    
risposta data 12.01.2017 - 13:57
fonte
1

Opinion 3: A smart mix of the above.

La definizione dice quasi tutto. L'unica domanda è "si può ottenere un mix intelligente?", Che dipenderebbe da chi scrive il codice in primo luogo.

    
risposta data 12.01.2017 - 14:07
fonte
0

L'opzione 1 è "più veloce" con una singola richiesta, ma scala male se la logica di selezione è complessa, perché solitamente una casella sql sarà condivisa tra molte caselle di app.

L'opzione 2, così come scritta, comporterà enormi trasferimenti di dati e probabilmente esaurirà la memoria nelle caselle dell'app. Immagino tu voglia dire avere alcune clausole contro gli indici ??

Non penso che tu possa riassumere tutto altrimenti l'Opzione 3 "sii intelligente!" c'è una risposta giusta e sbagliata a "dovrebbe clausola X essere in sql". Ma puoi essere sicuro solo se misurerai la performance. Non solo della query, ma del sistema nel suo complesso, sotto carico.

In generale ho trovato che è più vicino all'opzione 2 rispetto all'opzione 1. Immagino che questa domanda tende a emergere quando un DBA propone di fare TUTTA la logica sul database perché "è più veloce". che non è assolutamente corretto.

    
risposta data 12.01.2017 - 14:03
fonte

Leggi altre domande sui tag