none
Utilizando campo tipo GUID RRS feed

  • 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.
    martes, 5 de febrero de 2013 15:58

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

    martes, 5 de febrero de 2013 18:40
  • 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í

    miércoles, 6 de febrero de 2013 13:03

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

    martes, 5 de febrero de 2013 16:34
  • Ya bueno... pero si el jefe te lo pide jajaa.

    No quiero ser maleducado, pero me podrias contestar las preguntas igualmente porfavor? Gracias por tu opinion jeje.

    martes, 5 de febrero de 2013 16:40
  • 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

    martes, 5 de febrero de 2013 18:40
  • 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
    martes, 5 de febrero de 2013 20:45
  • 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.

    miércoles, 6 de febrero de 2013 9:39
  • 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í

    miércoles, 6 de febrero de 2013 13:03
  • 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

    miércoles, 6 de febrero de 2013 15:09
    Moderador
  • Alberto, creo que este hilo se podría juntar con este otro (http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/thread/0b882d77-514f-4f0e-85fa-640b44ca1891) porque es básicamente el mismo
    miércoles, 6 de febrero de 2013 15:17