2009-11-18 9 views
15

Für die längste Zeit habe ich MySQL-Server verwendet, um Daten zu behandeln (in JAVA und in C#). Aber in letzter Zeit habe ich gute Dinge über LINQ und SQL Server gehört. Ich habe über die Konvertierung nachgedacht, aber ich weiß nicht viel über den SQL Server.C# - MySQL vs Microsoft SQL Server

Könnte jemand, der SQL Server zuvor verwendet hat, bitte definieren, wie gut es in Bezug auf Leistung und Benutzerfreundlichkeit mit MySQL Server verglichen wird.

Ich habe auch gehört, dass SQL Server wäre für C# besser sein, wie es in grundsätzlich gebaut wird.

+0

Dies sollte mit einem allgemeinen Vergleich der beiden helfen, unabhängig von C#: http://tinyurl.com/yll4aro –

+0

Ich dachte nicht, dass dies eine vollständige Antwort verdient, aber ich werde kommentieren, dass ich denke, dass es selten ist, dass Menschen Verwenden Sie die CLR in SQL Server für ihren Hauptdatenzugriff. ADO.NET, LINQ und Entity Framework scheinen die Hauptauswahl zu sein. –

+0

Wenn Sie an LINQ interessiert sind, brauchen Sie nicht viel über SQL Server zu wissen. Der Hauptzweck ist, dass LINQ den Datenzugriff abstrahiert, sodass Sie keine SQL-Abfragen direkt schreiben. –

Antwort

54

Ich habe SQL Server seit vielen Jahren für große und kleine C# -Projekte verwendet, habe aber im letzten Jahr hauptsächlich MySQL für verschiedene C# - (aber Open-Source-bezogene und Startup-bezogene) Projekte verwendet, die bereits MySQL verwenden .

Ich vermisse SQL Server! Nach meiner Erfahrung ist SQL Server in vielerlei Hinsicht besser:

  • der Abfrageoptimierer in SQL Server ist intelligenter, was bedeutet, dass Sie häufig Abfragen erstellen können und sie optimale Abfragepläne produzieren. Mit MySQL verbringe ich mehr Zeit damit, selbst relativ einfache Abfragen manuell zu tunen, um gute Abfragepläne zu erstellen.
  • Die zugrunde liegende Datenbank-Engine in SQL Server kann eine breitere Palette von Funktionen ausführen, um die Leistung zu steigern. Zum Beispiel sind alle Joins in MySQL Nested-Loop-Joins, während SQL Server Hash-Joins oder Merge-Joins ausführen kann, die manchmal die Abfrageleistung 10x + erhöhen können. SQL Server kann auch Abfragen parallelisieren, die insbesondere bei großen Data-Warehouse-Workloads die Leistung erheblich steigern können.
  • die GUI-Tools sind Meilen voraus. Der grafische Abfrageoptimierer von SQL Server macht die Abfrageoptimierung zum Kinderspiel - Sie werden nie mehr zu EXPLAIN EXTENDED zurückkehren wollen. Die grafischen Überwachungstools von SQL Server 2008 sind so viel einfacher als das Durchsuchen des langsamen Abfrageprotokolls, um herauszufinden, was falsch läuft. Und so weiter.
  • Wie Sie erwähnt haben, ist die .NET-Integrationsgeschichte (C#, Linq, Entity Framework usw.) in SQL Server besser. Ich benutze auch C#, Entity Framework und LINQ mit MySQL, also ist es kein Entweder-oder-Ding, obwohl die Leistung mit SQL Server in einer .NET-Umgebung wahrscheinlich besser ist, weil die Teams zusammenarbeiten, um die Leistung zu steigern und die Integration zu verbessern .
  • Die SQL-Sprachunterstützung von SQL Server ist reicher als die von MySQL, einschließlich einiger sehr cooler Funktionen (speziell in SQL 2008) wie ROW_NUMBER(), GROUPING_SETS, OPTIMIZE FOR, computed columns usw.
  • Backup ist viel schneller, vor allem in SQL 2008 mit komprimierten Backups
  • Es gibt keine Oracle-Akquisition Cloud über die Zukunft von SQL Server hängen.
  • SQL Server (besonders die teuren Editionen) kommen mit anderen Leckerbissen, wie ein OLAP-Data-Warehouse (SSAS), eine Reporting-Lösung (SSRS), ein ETL-Tool (SSIS), ein Scheduler (SQL-Agent), etc. Sie können Holen Sie sich ähnliche Open-Source-Tools kostenlos (zB Pentaho, BIRT, etc.), aber die Integration ist mit SQL Server besser.
  • Das heißt, es gibt erhebliche Nachteile, die möglicherweise nicht viel Brecher für Sie sein:

    • Sie Windows-Server stecken verwenden, mit allen Vor- und Nachteile damit verbunden sind
    • SQL Server, insbesondere die höherwertigen Editionen, sind expensive! Für kleine DBs (< 4GB, glaube ich) ist SQL Server Express jedoch kostenlos und ist fast so voll ausgestattet wie der normale SQL Server - wenn Sie wissen, dass Ihre Daten klein sind und Sie wissen, dass Ihr Chef ein Geizkragen ist Express ist der Weg zu gehen. Außerdem gibt es eine neue SQL Server 2008 Web Edition, die für Internet-orientierte Web-Apps theoretisch günstiges Hosting anbieten sollte, da die Kosten für einen Hoster nur 15 US-Dollar pro Monat betragen.
    • Es ist nicht Open Source. Einige Firmen und Entwicklungsteams sind aus gutem Grund (Debugging, Kosten, Philosophie, etc.) sehr leidenschaftlich dafür!
    • im Zusammenhang mit oben: Wenn Sie einen Fehler in MySQL behoben haben möchten, und Sie die Fähigkeiten haben, können Sie es selbst beheben. Mit SQL Server gibt es schmerzhafte Fehler bei der Abfrageverarbeitung, Optimierung usw., die jahrelang bestehen bleiben. Ich habe eine absurde Menge an Zeit damit verbracht, einige davon zu bearbeiten.
    • für sehr einfache, schreibgeschützte (oder nicht-transaktionale) Workloads (z. B. ein DB-basierter Cache-Zugriff von einer Web-App), wo Sie mit MyISAM anstelle von InnoDB kommen können, höre ich, dass MySQL wesentlich schneller sein kann .
    • Vorbehalt: Ich habe gehört, dass MySQL 6.0 viele der oben genannten Lücken und Unterschiede angehen soll, aber ich habe mich nicht mit der Geschwindigkeit der Oracle-Sache usw. beschäftigt. oder Feature-Set.

      re: Ihre "C# ist eingebaut" Hinweis: Ja, Sie können gespeicherte Prozeduren, Funktionen, Aggregate, etc. mit .NET-Sprachen entwickeln, aber IMHO in den meisten Szenarien ist dies mehr Mühe als es lohnt, einschließlich weil Die Bereitstellung ist schwieriger und DBAs sind weniger mit .NET-Code auf ihren Servern vertraut. Der wahre Gewinn für eine C# + .NET + Visual Studio + SQL Server-Kombination, IMHO, ist, dass sie in den letzten 10 Jahren parallel entwickelt wurden, damit alle gut zusammenarbeiten, so dass Sie Benutzerfreundlichkeit und Synergie erhalten, die Sie haben möglicherweise nicht mit MySQL. Wie oben erwähnt, ist dies jedoch kein Deal-Breaker oder Deal-Maker. Es ist nur einfacher, SQL Server mit dem Rest des Microsoft-Stacks zu verwenden.

      Zusammenfassend lassen Sie mich klar sein, dass MySQL für viele DB-Workloads gut genug ist - es funktioniert, es ist stabil, es ist schnell, es hat ziemlich gute Tools, etc. Und es ist erschwinglich! :-) Ich würde ein Projekt niemals ablehnen, nur weil es MySQL benutzt. Aber der Vergleich ist, als würde man eine Honda gegen einen BMW fahren ... die Honda bringt dich dorthin, wo du hin willst, aber wenn dein Geldbeutel es nehmen kann, wirst du die Fahrt mit dem Bimmer viel mehr genießen. :-)

    +1

    +1, sehr gründliche Antwort. –

    +1

    Denken Sie daran, dass die Web Edition ausschließlich für öffentlich zugängliche Web-Apps oder -Websites und nicht für Intranets gedacht ist. – MartW

    +1

    Ich füge hinzu, dass mySQL für einfachere Abfragen schneller sein kann. Eine weitere Option ist PostGreSQL, es ist zwischen den 2. Es kann auf Enterprise-Größen wie (manche sagen besser als) MS SQL Server skaliert werden. Kostet keine Bazillionen Dollar wie SQL Server (sehr abhängig davon). –

    1

    LINQ eine Sprache in seinem eigenen Recht und ist nicht auf eine bestimmte Datenbank oder sogar an eine Datenbank gebunden. Wirklich ist es nur ein Werkzeug für die Manipulation von strukturierten Datensammlungen. Die zugrunde liegende Sprache, in der das DBMS geschrieben wird, sollte nicht davon abhängen, in welcher Sprache Sie es verwenden.

    +4

    LINQ to SQL ist sehr stark an SQL Server gebunden. – LukeH

    +0

    Eh, irgendwie. Es gibt keine offizielle MS-Unterstützung für linq zu mysql, aber es gibt ein Open-Source-Projekt mit einem mysql-Provider. –

    +0

    @Chris: Wenn du in den Bereich "Hacker" kommst (dieser Begriff klingt negativer als ich vorhabe), dann sind alle Wetten ausgeschaltet. In Bezug auf echte LINQ-zu-SQL (im Vergleich zu beispielsweise dem Entity Framework) ist es direkt mit SQL Server verbunden. Tatsächlich hat es sogar Probleme mit SQLCE. –

    1

    C# würde auf MySQL und SQLServer im Grunde identisch mit ADO.NET zugreifen (oder LINQ - LINQ to SQL ist mit SQL Server verbunden, aber es scheint keine lange Lebensdauer zu haben), also nicht ein Faktor in meinen Gedanken sein, obwohl IDE Integration sein könnte. Die Vorteile von SQL Server würden den umfassenderen Umfang der Entwicklungsunterstützung innerhalb von SQL Server, den Agenten und die Planung, das Sicherheitsmodell sowie Indizierung, Optimierung und andere Funktionen wie Integration Services, Reporting Services und Analysis Services umfassen relativ einfach zu verwalten große Systeminfrastrukturen.

    Ich glaube nicht, dass Sie genug Informationen über Ihr System gegeben haben, um die Wahl zwischen ihnen an dieser Stelle offensichtlich zu machen.

    4

    Ich benutze beide ziemlich regelmäßig und studiere derzeit für meinen Sql Server MCTS, also kann ich hier wohl ein paar nützliche Kommentare einwerfen.

    SQL Server ist eine sehr viel umfangreichere Datenbank, insbesondere die Version 2008. MySQL unterstützt nicht einmal Spaltenbeschränkungen (zum Beispiel das Erstellen einer int-Spalte und dann das Einschränken des Werts auf 1 bis 1000 - kann dies in MySQL nicht automatisch erzwingen). SQL Server bietet Volltextindizierung, native XML-Spalten und -Manipulation, mehrere Transaktionsmodi, komplexe Sicherheitsangebote, Replikations- und verteilte Funktionen sowie eine großartige Management-Suite.

    In Bezug auf Ihren C# -Kommentar, ja, SQL Server hat die Möglichkeit, CLR-Objekte zu importieren, was bedeutet, dass Sie einige .Net-Code kompilieren und in SQL Server einfügen können und Datenbankfunktionen verwenden. Dies ist besonders nützlich zum Erstellen neuer Aggregatfunktionen, da Sie Cursor umgehen und schnellere CLR-Code-Schleifen verwenden können.

    Sie können SQL Server auch auf den Griff optimieren, bis hin zu den Sperr- und Isolationsmodi, die es verwendet, und der CPU/dem Arbeitsspeicher, die ein bestimmter Thread verwenden kann.

    MySQL hingegen ist kostenlos und relativ einfach einzurichten, mit genügend Optionen, dass die meisten Website-Besitzer ziemlich glücklich sind, es für ihre grundlegenden CRUD-Anwendungen zu verwenden.

    Wenn Sie Linq2Sql verwenden möchten, benötigen Sie SQL Server. Wenn Sie Tonnen von erweiterten Funktionen benötigen, ist SQL Server der Weg, um sicher zu gehen.

    +0

    Danke für die Information - Aber was ist mit Portabilität, ist SQL Compact Server wirklich "portabel" wie MySQL? – TheAJ

    +1

    SQL "Compact" ist viel portabler als MySQL; Betrachten Sie es als analog zu SQLite. –

    1

    Aus einer Entwicklung (Codierung) Standpunkt habe ich mit beiden als Java-Entwickler und C# -Entwickler gearbeitet (Verbindung zu beiden auf verschiedenen Projekten, so Java zu SQLServer, Java zu MySQL, C# zu MySQL, C# zu SQLServer). Persönlich habe ich keinen großen Unterschied bemerkt, obwohl ich nichts zu komplex gemacht habe. Ich denke nicht, dass es zu viele Sorgen gibt, wenn Sie denken, dass es eine steile Lernkurve geben wird, wenn Sie nicht in einige wirklich nittige Server-spezifische Dinge einsteigen wollen. Es gibt ein paar kleine Unterschiede, aber nichts, was man nicht schnell aufgreifen würde.

    2

    Ich habe mit beiden gearbeitet, obwohl weit mehr mit SqlServer. In einem großen Geschäft, in dem viele Anwendungsentscheidungen von DB Architects getroffen werden, bietet SQL Server mehr. Replikation, SSIS, etc. Aber diese fügen eine Menge Komplexität hinzu und sind meiner Erfahrung nach die Ursache für einen Großteil der Betriebsausfälle.

    Aber als Datenspeicher für eine Softwareanwendung tut MySql, was Sie brauchen und ist einfach, zuverlässig, schnell und einfach.

    Wenn Sie streng philosophisch sprechen, möchten Sie Ihre Anwendungslogik wirklich in Ihrem Anwendungscode, nicht in komplexen SQL- und Constraint-Definitionen. Verwenden Sie die Grundlagen in Ihrem Datenspeicher und speichern Sie die Zeit, die Sie speichern, in das Programm selbst.

    +0

    Ihr letzter Kommentar über Anwendungslogik in Ihrem Anwendungscode ist die vorherrschende Weisheit. Ich habe an vielen Unternehmensanwendungen gearbeitet, die viel Datenverarbeitungscode in gespeicherten Prozeduren enthalten, und es funktioniert gut und ist schneller als in Code. – infocyde

    1

    Haben Sie eine umfangreichere Open Source-Datenbank wie PostgreSQL in Betracht gezogen? Es ist nichts falsch mit SQL Server, aber es fängt an, Sie in eine lizenzierte Software einzubinden, von der Sie sich fernhalten können, wenn Sie bei einem Open-Source-Counter bleiben. Es kommt darauf an, ob das für dich in Ordnung ist.