2010-01-19 7 views
5

Sono uno sviluppatore C# che ha svolto alcune operazioni di base sul database in T-SQL. Tuttavia, ho bisogno di scrivere una stored procedure molto complicata, ben al di sopra della mia conoscenza T-SQL.SQL Server 2008 CLR vs T-SQL: Esiste una differenza di efficienza/velocità?

La scrittura di una stored procedure in C# utilizzando il .net CLR come parte di SQL Server 2008 causa una minore efficienza della stored procedure rispetto alla scrittura in T-SQL? La differenza (se del caso) è significativa? Perché?

risposta

8

CLR richiedono un certo overhead di comunicazione (per passare dati tra il CLR e SQL Server)

regola è:

  • Se la logica comprende principalmente trasformazioni di massicce insiemi di dati, che può essere eseguito utilizzando le operazioni impostate, quindi utilizzare TSQL.

  • Se la logica include principalmente calcoli complessi di quantità relativamente piccole di dati, utilizzare CLR.

Con le operazioni impostate si può fare molto più di quello che sembra. Se pubblichi qui le tue richieste, probabilmente saremo in grado di aiutarti.

+0

Di quale sovraccarico di comunicazione stiamo parlando? Ho enormi quantità di dati, ma sto anche facendo calcoli complessi su di esso piuttosto che impostare le operazioni. –

+0

'@ bytenik': dipende in gran parte da cosa si intende fare con i dati. Una funzione di aggregazione 'SQL' integrata, ad esempio, funziona circa 3 volte più velocemente di un aggregato' CLR'. Se stai andando, per esempio, a unire due recordset, dovrai sviluppare e hardcode il join nel 'CLR', mentre' SQL Server' ha diversi algoritmi nativi e seleziona quello più appropriato, che può aumentare le prestazioni degli ordini di magnitudine. Dall'altro lato, 'SQL Server' manca di aggregati in esecuzione e un' CLR' può essere di grande aiuto. Devo vedere i tuoi requisiti per dare una risposta più specifica. – Quassnoi

5

Vedere Performance of CLR Integration:

questo argomento vengono descritte alcune delle scelte progettuali che migliorano la prestazioni di Microsoft SQL Server integrazione con il Microsoft .NET Framework Common Language Runtime (CLR).

0

La domanda "La scrittura di una stored procedure in C# utilizzando il .net CLR come parte di SQL Server 2008 causa una minore efficienza della stored procedure rispetto a quando è stata scritta in T-SQL?" è davvero troppo ampio per ricevere una risposta significativa. L'efficienza varia notevolmente a seconda non solo di quali tipi di operazioni stai facendo, ma anche di come si fa su queste operazioni con. Si potrebbe avere una procedura memorizzata CLR che dovrebbe superare un Proc T-SQL equivalente, ma in realtà si comporta in modo peggiore a causa della scarsa codifica e viceversa.

Data la natura generale della domanda, posso dire che "in generale", le cose che possono essere fatte in T-SQL (senza troppa complessità) dovrebbero essere fatte in T-SQL. Una possibile eccezione potrebbe essere per i TVF poiché l'API CLR ha un'opzione molto interessante per lo streaming dei risultati (ho scritto un articolo per SQL Server Central - è richiesta la registrazione gratuita - su STVFs). Ma non c'è modo di saperlo con certezza senza avere entrambe le versioni CLR e T-SQL del codice e testare entrambi con i dati a livello di produzione (anche il codice scritto male tipicamente funziona abbastanza bene con 10k righe o meno).

Quindi la domanda vera qui si riduce a:

So C# meglio di me so T-SQL. Cosa dovrei fare?

E in questo caso sarebbe meglio chiedere semplicemente come affrontare questo particolare compito in T-SQL.Potrebbe benissimo darsi che ci siano soluzioni non complesse di cui non si sa ancora nulla, ma che sarebbero in grado di capire quando si apprende la funzione/tecnica/ecc. E si può ancora codificare una soluzione equivalente in SQLCLR e confrontare le prestazioni tra di loro. Ma se non c'è una risposta soddisfacente per gestirlo in T-SQL, fallo in SQLCLR.

Detto questo, ho fatto uno studio 3 anni fa per quanto riguarda SQLCLR vs T-SQL Performance e pubblicato i risultati su Simple-Talk.