2009-02-25 18 views

Respuesta

2

Hay rendimiento consideraciones relacionados con el tamaño de la columna de unión Un entero tiene 4 bytes de ancho, por lo que cualquier valor de char mayor de 4 bytes requiere más E/S de disco, espacio de caché, etc. Obviamente, un char (5) no afectaría mucho, pero un char (4000) sería extraordinariamente dispendioso. . Duplique los tamaños de char si usa tipos de Unicode.

Por lo general, esta pregunta surge en el contexto de las claves naturales vs suplentes. En ese argumento, el tamaño del tipo de datos no es el único factor, ya que a menudo puede evitar unirse con una clave natural (char).

Por supuesto, ninguno de los dos es probable que sea el cuello de botella en su aplicación, por lo que diseñe con impunidad (al menos en esta área).

+0

Depende del volumen antes de poder decir que no será significativo. Al procesar grandes cantidades de datos almacenados en un almacén, unirse a los campos CHAR (64) es notoriamente menos eficiente que unirse en los campos INT. – MatBailie

+0

En realidad, ese char (64) contendría algún pedazo de datos de dominio que es único (la clave natural). A menudo, puedes evitar la unión si ya tienes la clave natural, que es incluso mejor que la int. Pero sí, si está diseñando un almacén de datos grande, puede tener su propia opinión sobre estos asuntos. –

1

No, no hay (en Oracle). Lo que puede marcar la diferencia es:
- Si los tipos de datos en su condición de unión son diferentes (la conversión implícita puede tener una penalización de rendimiento). Entonces unir un char a un varchar puede ser malo.
- Si un campo tiene un índice y el otro no.
- Si los datos en una columna son mucho más largos que en la otra columna.

0

No, siempre que los tipos de datos son los mismos entre las mesas que se unan a que debe estar bien

1

CHAR o VARCHAR se almacenan como ASCII o Unicode dependiendo de su juego de caracteres. Un int se almacenará como una forma empaquetada. Si toma un número en forma interna, será más pequeño que el mismo número en forma de carácter (cadena). Almacenar como tipos numéricos siempre será más eficaz que almacenar como caracteres.

4

Unirse a un carácter char o var normalmente tendrá una sobrecarga en lugar de unirse a un int. Hay dos factores que yo sepa cuando se comparan caracteres:
- cotejo tiene que ser tomado en cuenta
- campos char han más datos que se van a comparar *

* (cada personaje está representado por 8 bits, una 10 valor char es por tanto 80 bits de largo, en comparación con 32 bits para un int)

* (esto es 16 bits por carácter, si usando NCHAR o NVARCHAR)

+0

Sabía que esta pregunta despertaría su interés :) –

+0

Dice esto porque si veo uniones en los campos de caracteres, exploto mi parte superior :) – MatBailie