2011-04-11 22 views
16

Tengo un montón de tablas que consolidan los datos en diferentes niveles: trimestral, por hora, diaria y mensual. Aparte de eso, hay una tabla base que también contiene los datos "en bruto", esta contiene algunas columnas adicionales. Las tablas consolidadas tienen todas las mismas columnas.Fecha SQL Server vs smalldatetime

Las tablas base, trimestrales y por hora hacen uso de una columna del tipo smalldatetime para marcar los datos. Esta columna también estará disponible en las tablas diarias y por hora, pero por supuesto no necesitaré el aspecto del tiempo aquí.

En aras de la simplicidad, quiero usar aquí también el tipo de datos smalldatetime, pero ¿quizás sea mejor para el rendimiento usar un tipo de datos de fecha para la columna?

¿Hay realmente una gran diferencia entre los tipos cuando se trata de rendimiento?

+1

SMALLDATETIME está en desuso en SQL Server 2008. Use DATE, TIME o DATETIME2. http://msdn.microsoft.com/en-us/library/ms182418.aspx – sqlvogel

+0

Gracias. Bueno, mi pregunta con el tiempo será la misma: datetime vs date –

+3

@dportas: smalldatetime * * no * está en desuso: es un tipo estándar en ANSI también. – gbn

Respuesta

13

Por lo general, es una buena idea utilizar el tipo de datos más pequeño que necesite. No debe usar varchar (max) o incluso varchar (10) para almacenar una abreviatura de estado de 2 caracteres.

En el mismo sentido, si solo necesita la fecha (por ejemplo, 4/11/2001), utilice el tipo de fecha y no el tipo de fecha y hora.

Aunque puede que no sea una gran ganancia en rendimiento (DateTime es 5 bytes más grande que Date). Puede comenzar a sumar si tiene múltiples campos y/o múltiples filas.

+2

Sí, estoy de acuerdo. Encontré un buen artículo sobre el tema también: http://www.mssqltips.com/tip.asp?tip=1616. No se trata de rendimiento, sino de una comparación de las diferentes soluciones para almacenar fechas. –

4

Varios tipos de datos tienen varios size que afectan al tamaño de los datos/índices, que es más importante que el rendimiento de la consulta (costo de E/S).

Por otro lado, la conversión entre tipos de datos puede ser costosa. Además, la conversión implícita entre varios tipos de datos puede ser incorrecta/inesperada.

Me gustaría mantener un tipo de fecha (4 bytes smalldatetime en este caso) si se inscribe entre las tablas en las columnas de fecha o si no mantener el más pequeño posible tipo de fecha - smalldatetime para almacenar horas y los cuartos y date para pura fechas.

0

Desafortunadamente en el caso de smalldatetime, me causó problemas al usar la utilidad bcp (copia masiva) para las operaciones de exportación/importación. A la importación de BCP parece no gustarle los campos smalldatetime (al menos como son exportados por BCP). Versión tan tarde como SQL Server 2008 y con formato "nativo" en bcp. Por lo tanto, usaré datetime para mi trabajo en el futuro porque me gusta poder usar bcp para mover datos.