Ho usato SQL Server per molti anni su progetti C# grandi e piccoli, ma nell'ultimo anno ho utilizzato principalmente MySQL su vari progetti C# (ma relativi all'open source e all'avvio) che già utilizzavano MySQL.
Mi manca SQL Server! Nella mia esperienza, SQL Server è migliore in molti modi:
- Query Optimizer in SQL Server è più intelligente, il che significa che puoi spesso creare query e produrre piani di query ottimali. Con MySQL, mi ritrovo a dedicare più tempo alla messa a punto manuale anche di query relativamente semplici per produrre buoni piani di query.
- il motore di database sottostante in SQL Server può fare una più ampia varietà di cose per migliorare le prestazioni. ad esempio, tutti i join in MySQL sono Nested Loop join, mentre SQL Server può eseguire hash join o unire join che a volte possono aumentare le prestazioni delle query di oltre 10 volte. SQL Server può anche parallelizzare le query che, soprattutto per carichi di lavoro di data warehouse di grandi dimensioni, possono aumentare notevolmente le prestazioni.
- gli strumenti della GUI sono molto più avanti. Query Optimizer del piano grafico di SQL Server rende l'ottimizzazione delle query un gioco da ragazzi:non vorrai più tornare a EXPLAIN EXTENDED. Gli strumenti di monitoraggio grafico di SQL Server 2008 sono molto più semplici che scavare nel registro delle query lente per capire cosa non va. E così via.
- Come hai detto, la storia dell'integrazione .NET (C#, Linq, Entity Framework, ecc.) in SQL Server è migliore. Uso C#, Entity Framework e LINQ anche con MySQL, quindi non è una cosa né l'altra, anche se è probabile che le prestazioni siano migliori con SQL Server in un ambiente .NET perché i team lavorano insieme per migliorare le prestazioni e far funzionare meglio l'integrazione .
- Il supporto del linguaggio SQL di SQL Server è più ricco di quello di MySQL, incluse alcune funzionalità molto interessanti (soprattutto in SQL 2008) come
ROW_NUMBER()
,GROUPING_SETS
,OPTIMIZE FOR
, colonne calcolate , ecc. - Il backup è molte volte più veloce, specialmente in SQL 2008 con backup compressi
- Non c'è alcun cloud di acquisizione Oracle che incombe sul futuro di SQL Server.
- SQL Server (soprattutto le edizioni costose) viene fornito con altre chicche, come un data warehouse OLAP (SSAS), una soluzione di reporting (SSRS), uno strumento ETL (SSIS), uno scheduler (SQL Agent), ecc. È possibile ottieni strumenti open source simili, gratuitamente (ad es. Pentaho , BIRT , ecc.) ma l'integrazione tende a essere migliore con SQL Server.
Detto questo, ci sono degli svantaggi significativi, che potrebbero essere o meno rompicapo per te:
- sei bloccato usando i server Windows, con tutti i vantaggi e gli svantaggi che ciò comporta
- SQL Server, in particolare le edizioni di fascia alta, sono costoso ! Per piccoli DB (<4 GB credo), SQL Server Express è gratuito, tuttavia, ed è completo quasi quanto il normale SQL Server:se sai che i tuoi dati saranno piccoli e sai che il tuo capo è un cheapskate , Express è la strada da percorrere. Inoltre, c'è una nuova edizione Web di SQL Server 2008 che, per le app Web con connessione a Internet, dovrebbe teoricamente offrire un hosting economico poiché il costo per un hoster è di soli $ 15 al mese per processore.
- Non è open source. Alcune aziende e team di sviluppo ne sono molto appassionati, per buoni motivi (debugging, costi, filosofia, ecc.)!
- relativo a quanto sopra:se vuoi correggere un bug in MySQL e hai le competenze, puoi risolverlo da solo. Con SQL Server, ci sono bug dolorosi nell'elaborazione delle query, nell'ottimizzazione e così via che persistono per anni:ho passato un'assurda quantità di tempo a risolverli.
- per carichi di lavoro molto semplici, di sola lettura (o non transazionali) (ad es. un accesso alla cache basato su DB da un'app Web) in cui puoi farla franca usando MyISAM invece di InnoDB, ho sentito che MySQL può essere significativamente più veloce .
Avvertenza:ho sentito che MySQL 6.0 dovrebbe colmare molte delle lacune e differenze di cui sopra, ma devo ammettere che non mi sono tenuto aggiornato su come la cosa Oracle, ecc. Influirà sulla pianificazione e/o sul set di funzionalità.
re:il tuo "C# è integrato" nota:sì, puoi sviluppare stored procedure, funzioni, aggregati, ecc. Usando i linguaggi .NET, ma IMHO nella maggior parte degli scenari questo è più un problema di quanto valga la pena, anche perché la distribuzione è più difficile e I DBA sono meno a loro agio con il codice .NET sui loro server. La vera vittoria per una combinazione C# + .NET + Visual Studio + SQL Server, IMHO, è che sono stati progettati in parallelo negli ultimi 10 anni per funzionare bene insieme, quindi otterrai facilità d'uso e sinergia che potrebbe non essere possibile utilizzare MySQL. Detto questo, come ho notato sopra, questo non è un affare o un affare ... è solo più fluido usando SQL Server con il resto dello stack Microsoft.
In sintesi, vorrei essere chiaro che, per molti carichi di lavoro DB, MySQL è abbastanza buono:funziona, è stabile, è veloce, ha strumenti ragionevolmente buoni, ecc. Ed è conveniente! :-) Non rifiuterei mai un progetto semplicemente perché usano MySQL. Ma il confronto è come guidare una Honda contro una BMW... la Honda ti porta dove vuoi, ma se il tuo portafoglio può portarlo, ti godrai il viaggio molto di più con il Bimmer. :-)