sql >> Database teknologi >  >> RDS >> Mysql

C# - MySQL vs Microsoft SQL Server

Jeg har brugt SQL Server i mange år på store og små C#-projekter, men har brugt mest MySQL det sidste år på forskellige C#- (men open source-relaterede og opstartsrelaterede) projekter, som allerede brugte MySQL.

Jeg savner SQL Server! Efter min erfaring er SQL Server bedre på mange måder:

  • forespørgselsoptimeringsværktøjet i SQL Server er smartere, hvilket betyder, at du ofte kan bygge forespørgsler, og de vil producere optimale forespørgselsplaner. Med MySQL synes jeg, at jeg bruger mere tid på at håndtune selv relativt simple forespørgsler for at lave gode forespørgselsplaner.
  • den underliggende databasemotor i SQL Server kan gøre en bredere vifte af ting for at øge ydeevnen. for eksempel er alle joins i MySQL Nested Loop joins, mens SQL Server kan lave Hash Joins eller Merge Joins, hvilket nogle gange kan booste forespørgselsydeevne 10x+. SQL Server kan også parallelisere forespørgsler, som især for store datawarehouse-arbejdsbelastninger kan øge ydeevnen dramatisk.
  • GUI-værktøjerne er milevidt foran. SQL Servers grafiske plan-forespørgselsoptimering gør forespørgselsoptimering til et snuptag - du vil aldrig gå tilbage til EXPLAIN EXTENDED. SQL Server 2008's grafiske overvågningsværktøjer er så meget nemmere end at grave gennem den langsomme forespørgselslog for at finde ud af, hvad der går galt. Og så videre.
  • Som du nævnte, er .NET-integrationshistorien (C#, Linq, Entity Framework osv.) i SQL Server bedre. Jeg bruger også C#, Entity Framework og LINQ med MySQL, så det er ikke en enten-eller-ting, selvom ydeevnen sandsynligvis vil være bedre med SQL Server i et .NET-miljø, fordi holdene arbejder sammen for at øge ydeevnen og få integrationen til at fungere bedre .
  • SQL Servers SQL-sprogunderstøttelse er rigere end MySQL's, inklusive nogle meget fede funktioner (i SQL 2008 især) som ROW_NUMBER() , GROUPING_SETS , OPTIMIZE FOR , beregnede kolonner osv.
  • Sikkerhedskopiering er mange gange hurtigere, især i SQL 2008 med komprimerede sikkerhedskopier
  • Der er ingen Oracle-opkøbssky, der hænger over fremtiden for SQL Server.
  • SQL-server (især de dyre udgaver) kommer med andre godbidder, såsom et OLAP-datavarehus (SSAS), en rapporteringsløsning (SSRS), et ETL-værktøj (SSIS), en planlægger (SQL-agent) osv. Du kan få lignende open source-værktøjer gratis (f.eks. Pentaho , BIRT osv.), men integration har en tendens til at være bedre med SQL Server.

Når det er sagt, er der betydelige ulemper, som måske eller måske ikke er deal-breakers for dig:

  • du sidder fast ved at bruge Windows-servere, med alle de plusser og minusser, det indebærer
  • SQL Server, især de avancerede udgaver, er dyre ! For små DB'er (<4GB tror jeg), er SQL Server Express dog gratis og er næsten lige så omfattende som den almindelige SQL Server - hvis du ved, at dine data bliver små, og du ved, at din chef er en billig skate. , Express er vejen at gå. Der er også en ny SQL Server 2008 Web Edition, som til internetvendte webapps teoretisk set burde tilbyde billig hosting, da prisen for en hoster kun er $15/måned pr. processor.
  • Det er ikke open source. Nogle virksomheder og udviklingsteams er meget passionerede omkring dette af gode grunde (fejlretning, omkostninger, filosofi osv.) !
  • relateret til ovenstående:Hvis du ønsker at få rettet en fejl i MySQL, og du har færdighederne, kan du selv rette den. Med SQL Server er der smertefulde fejl i forespørgselsbehandling, optimering osv., som varer ved i årevis – jeg har brugt absurd meget tid på at omgå nogle af dem.
  • til meget enkle, skrivebeskyttede (eller ikke-transaktionelle) arbejdsbelastninger (f.eks. en DB-baseret cache-adgang fra en webapp), hvor du kan slippe afsted med at bruge MyISAM i stedet for InnoDB, har jeg hørt, at MySQL kan være betydeligt hurtigere .

Advarsel:Jeg hører, at MySQL 6.0 formodes at løse mange af hullerne og forskellene ovenfor, men jeg har ganske vist ikke holdt mig opdateret med, hvordan Oracle-tinget osv. vil påvirke tidsplanen og/eller funktionerne.

re:din "C# er indbygget" note:ja, du kan udvikle lagrede procedurer, funktioner, aggregater osv. ved at bruge .NET sprog, men IMHO i de fleste scenarier er dette mere besvær end det er værd, inklusive fordi implementering er sværere og DBA'er er mindre komfortable med .NET-kode på deres servere. Den virkelige gevinst for en C# + .NET + Visual Studio + SQL Server-kombination, IMHO, er, at de er blevet designet parallelt i løbet af de sidste 10 år for at alle fungerer godt sammen, så du får brugervenlighed og synergi, som du kan muligvis ikke bruge MySQL. Når det er sagt, som jeg bemærkede ovenfor, er dette ikke en deal-breaker eller en deal-maker... det er bare nemmere at bruge SQL Server med resten af ​​Microsoft-stakken.

Sammenfattende, lad mig gøre det klart, at for mange DB-arbejdsbelastninger er MySQL godt nok - det virker, det er stabilt, det er hurtigt, det har rimeligt gode værktøjer osv. Og det er overkommeligt! :-) Jeg ville aldrig afslå et projekt, blot fordi de bruger MySQL. Men sammenligningen er som at køre en Honda vs. en BMW... Hondaen får dig derhen, hvor du vil hen, men hvis din pengepung kan klare det, vil du nyde turen meget mere med Bimmeren. :-)



  1. forkert tal i forespørgslen

  2. Sådan genereres drop-tabelerklæring for alle tabellerne i en database - SQL Server / T-SQL vejledning del 48

  3. Java.lang.IllegalStateException:Allerede vedhæftet

  4. liste alle tabeller i en database med MySQLi