He usado SQL Server durante muchos años en proyectos C# grandes y pequeños, pero he estado utilizando principalmente MySQL durante el año pasado en varios proyectos C# (pero relacionados con fuente abierta y relacionados con startups) que ya estaban usando MySQL .
¡Extraño SQL Server! En mi experiencia, SQL Server es mejor en muchos aspectos:
- el optimizador de consultas en SQL Server es más inteligente, lo que significa que a menudo puede generar consultas y producirán planes de consulta óptimos. Con MySQL, me encuentro dedicando más tiempo a la sintonización manual, incluso consultas relativamente simples para producir buenos planes de consulta.
- el motor de base de datos subyacente en SQL Server puede hacer una variedad más amplia de cosas para aumentar el rendimiento. por ejemplo, todas las uniones en MySQL son uniones de bucle anidadas, mientras que SQL Server puede hacer uniones Hash o unir uniones, lo que a veces puede aumentar el rendimiento de las consultas en 10x +. SQL Server también puede paralelizar consultas que, especialmente para grandes cargas de trabajo de almacén de datos, pueden aumentar drásticamente el rendimiento.
- las herramientas de GUI están muy por delante. El optimizador de consultas de planes gráficos de SQL Server hace que la optimización de consultas sea muy fácil: nunca querrá volver a EXPLAIN EXTENDED. Las herramientas de supervisión gráfica de SQL Server 2008 son mucho más sencillas que buscar en el registro lento de consultas para descubrir qué es lo que está fallando. Y así.
- Como mencionaste, la historia de integración de .NET (C#, Linq, Entity Framework, etc.) en SQL Server es mejor. También uso C#, Entity Framework y LINQ con MySQL, por lo que no es una cosa o lo otra, aunque es probable que el rendimiento sea mejor con SQL Server en un entorno .NET porque los equipos trabajan juntos para mejorar el rendimiento y mejorar la integración. .
- El soporte de SQL de SQL Server es más rico que MySQL, incluidas algunas características muy interesantes (especialmente en SQL 2008) como
ROW_NUMBER()
, GROUPING_SETS
, OPTIMIZE FOR
, computed columns, etc.
- La copia de seguridad es mucho más rápida, especialmente en SQL 2008 con copias de seguridad comprimidas
- No hay una nube de adquisición de Oracle pendiente sobre el futuro de SQL Server.
- SQL Server (especialmente las costosas ediciones) vienen con otros extras, como un almacén de datos OLAP (SSAS), una solución de informes (SSRS), una herramienta ETL (SSIS), un programador (Agente SQL), etc. obtenga herramientas de código abierto similares, de forma gratuita (por ejemplo, Pentaho, BIRT, etc.) pero la integración tiende a ser mejor con SQL Server.
Dicho esto, también hay desventajas significativas, que pueden o no estar repartir-trituradores para usted:
- le pegan usando los servidores de Windows, con todas las ventajas y desventajas que esto conlleva
- SQL Server, especialmente las ediciones de gama alta, son expensive! Para pequeños DB's (< 4GB, creo), SQL Server Express es gratuito, y tiene casi todas las funciones del servidor SQL, si sabes que tus datos serán pequeños y sabes que tu jefe es un tacaño. , Express es el camino a seguir. Además, existe una nueva Edición Web de SQL Server 2008 que, en teoría, para aplicaciones web orientadas a Internet debería ofrecer alojamiento barato, ya que el costo para un proveedor de servicios de Internet es de solo $ 15/mes por procesador.
- No es de código abierto. Algunas compañías y equipos de desarrollo son muy apasionados por esto, por buenas razones (depuración, costo, filosofía, etc.).
- relacionado con lo anterior: si quiere que se solucione un error en MySQL, y tiene las habilidades, puede solucionarlo usted mismo. Con SQL Server, hay errores dolorosos en el procesamiento de consultas, la optimización, etc. que persisten durante años. He pasado una cantidad absurda de tiempo trabajando con algunos de ellos.
- para cargas de trabajo muy simples, de solo lectura (o no transaccionales) (por ejemplo, acceso a caché basado en DB desde una aplicación web) donde se puede usar MyISAM en lugar de InnoDB. Escucho que MySQL puede ser significativamente más rápido .
Advertencia: escuché que se supone que MySQL 6.0 soluciona muchos de los vacíos y diferencias anteriores, pero no me he mantenido al día con la forma en que lo de Oracle, etc. afectará el calendario y/o conjunto de características
re: su "C# está incorporada" nota: sí, puede desarrollar procedimientos almacenados, funciones, agregados, etc. usando lenguajes .NET, pero en mi humilde opinión, en la mayoría de los escenarios esto es más problemas de lo que vale, incluyendo porque la implementación es más difícil y los DBA son menos cómodos con el código .NET en sus servidores. La verdadera victoria para una combinación de C# + .NET + Visual Studio + SQL Server, en mi humilde opinión, es que han sido diseñados en paralelo durante los últimos 10 años para que todos funcionen bien juntos, por lo que obtendrá la facilidad de uso y la sinergia que necesita. puede no obtener el uso de MySQL. Dicho esto, como mencioné anteriormente, este no es un factor decisivo o un factor decisivo ... es más sencillo al usar SQL Server con el resto de la pila de Microsoft.
En resumen, déjeme aclarar que, para muchas cargas de trabajo DB, MySQL es lo suficientemente bueno-- funciona, es estable, es rápido, tiene herramientas razonablemente buenas, etc. ¡Y es asequible! :-) Nunca rechazaría un proyecto simplemente porque están usando MySQL. Pero la comparación es como conducir un Honda frente a un BMW ... el Honda lo lleva a donde quiere ir, pero si su billetera lo puede llevar, disfrutará mucho más con el Bimmer. :-)
Esto debería ayudar con una comparación general de los dos, independientemente de C#: http://tinyurl.com/yll4aro –
No creo que esto merezca una respuesta completa, pero comentaré que creo que es raro que la gente utilice el CLR en SQL Server para su acceso de datos principal. ADO.NET, LINQ y Entity Framework parecen ser las principales opciones. –
Si está interesado en usar LINQ, entonces realmente no necesita saber mucho sobre SQL Server. Todo el propósito es que LINQ abstraiga el acceso a los datos para que no escriba directamente consultas SQL. –