Principales respuestas
Utilizando campo tipo GUID

Pregunta
-
Buenas tardes!
Me gustaria recojer información sobre los campos de tipo GUID.
Por ejemplo tengo una tabla Proyectos(#id(GUID), nombre, descripcion)
Me gustaria saber priemro si a la hora de insertar un registre a la BD es más eficiente
crear yo antes el GUID o que lo autogenere SqlServer?
Y tambien, en caso de que sea mas eficiente que SqlServer autogenere mi GUID, es aconsejable que el GUID sea secuencial?
quiero decir creandolo utilizando newsequentialid()? o es mas recomendable utilizar newid()?
O alomejor es mejor tener un incremental integer. La verdad es que estoy un poco confuso.
Gracias.
Respuestas
-
Hola. Pues sin saber como lo generas, es difícil saber si es mejor con tu método o con el de SQL Server. Para lo que valga, yo siempre he usado el de SQL Server y siempre lo recomiendo, cuando el escenario lo amerita. De resto, la recomendación de Carlos es mejor.
Por otra parte, la misma documentación en línea del producto recomienda usar NEWSEQUENTIALID() (Transact-SQL) en lugar de NEWID().
Saludos,
Guillermo Taylor F.
IT Pro & Xbox gamer
My blog- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 10 de febrero de 2013 11:59
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 17 de febrero de 2013 16:32
-
El jefe también puede estar equivocado, puede que no conozca todas las implicaciones de usar GUID en SQL Server.
En cualquier caso; en cuanto a lo que preguntas, creo que Guillermo te ha contestado adecuadamente. Además, ten en cuenta que esto es un foro de SQL Server y como tal pues seguramente todos te recomendemos usar funciones propias de TSQL (entre otras cosas porque sabremos más de TSQL que de .NET), así que dentro de esto, pues la posibilidad de usar GUID secuenciales (mediante NEWSEQUENTIALID) es un problema menos del que preocuparte.
De todos modos, el saber si es más eficiente un método u otro lo puedes comprobar tú mismo ejecutando una prueba que compare ambas opciones: eso es lo que te debería hacerte tomar la decisión y no la opinión que podamos tener aquí
- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 10 de febrero de 2013 11:59
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 17 de febrero de 2013 16:31
Todas las respuestas
-
Si puedes, evita los GUID: son excesivamente anchos (ocupan mucho espacio) y aleatorios por naturaleza (aunque puedes forzar cierta secuencialidad mediante NEWSEQUENTIALID) lo que a su vez implica fragmentación.
Lo más recomendable es usar un número secuencial (típicamente INT con la propiedad IDENTITY activada), aunque eso ya dependerá de tu escenario
-
-
Hola. Pues sin saber como lo generas, es difícil saber si es mejor con tu método o con el de SQL Server. Para lo que valga, yo siempre he usado el de SQL Server y siempre lo recomiendo, cuando el escenario lo amerita. De resto, la recomendación de Carlos es mejor.
Por otra parte, la misma documentación en línea del producto recomienda usar NEWSEQUENTIALID() (Transact-SQL) en lugar de NEWID().
Saludos,
Guillermo Taylor F.
IT Pro & Xbox gamer
My blog- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 10 de febrero de 2013 11:59
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 17 de febrero de 2013 16:32
-
En estos momentos lo genero por codigo id = Guid.NewGuid(). Pero me quiero asegurar si es mejor hacerlo desde codigo o autogenerado por SqlServer. Gracis.
PD: a mi tmb me parece una tonteria utilizar GUID, es una parrafada muy grande.
- Editado Joanan16 martes, 5 de febrero de 2013 20:46
-
Buenos dias,
Tengo una duda con los GUID.
Que es eficaz por rendimiento generar por codigo los GUID : GUID.NewGuid() o que los autogenere SQL Server (NEWID o NEWSEQUENTIALID)?
Gracias.
- Combinado Alberto López Grande (qwalgrande)Moderator domingo, 10 de febrero de 2013 12:02 Misma pregunta del mismo usuario
-
El jefe también puede estar equivocado, puede que no conozca todas las implicaciones de usar GUID en SQL Server.
En cualquier caso; en cuanto a lo que preguntas, creo que Guillermo te ha contestado adecuadamente. Además, ten en cuenta que esto es un foro de SQL Server y como tal pues seguramente todos te recomendemos usar funciones propias de TSQL (entre otras cosas porque sabremos más de TSQL que de .NET), así que dentro de esto, pues la posibilidad de usar GUID secuenciales (mediante NEWSEQUENTIALID) es un problema menos del que preocuparte.
De todos modos, el saber si es más eficiente un método u otro lo puedes comprobar tú mismo ejecutando una prueba que compare ambas opciones: eso es lo que te debería hacerte tomar la decisión y no la opinión que podamos tener aquí
- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 10 de febrero de 2013 11:59
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 17 de febrero de 2013 16:31
-
Hola.
¿Qué es lo que necesitas realizar? En general, la obtención de GUID no es eficaz para el rendimiento en general, con lo que hay que medir con precisión los escenarios en los que emplearlos. Por ejemplo, es un error frecuente usar campos GUID como claves primarias en tablas.
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.com
Sígueme en twitter en http://twitter.com/qwalgrande -