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.
fonte
2014-07-13 19:39:54
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. –
'@ 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