¿Hay algún inconveniente de rendimiento en SQL para unir una tabla en un valor char (o varchar), en oposición a decir unirse en un valor entero?se une a ints vs une en chars (o varchars)
Respuesta
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).
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.
No, siempre que los tipos de datos son los mismos entre las mesas que se unan a que debe estar bien
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.
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)
Sabía que esta pregunta despertaría su interés :) –
Dice esto porque si veo uniones en los campos de caracteres, exploto mi parte superior :) – MatBailie
- 1. consulta anidada vs une a
- 2. Powershell se une a
- 3. subconsultas vs une
- 4. Herencia en datos se une a
- 5. "en" no se une a los elementos
- 6. MySQL Insertar y se une a
- 7. ¿Socket Python se une a cualquier IP?
- 8. SQL Server NOLOCK y se une a
- 9. Hibernate: polimórficos persistentes se une a
- 10. no se une con data.tables
- 11. rails scope y se une a
- 12. hibernate - HQL se une a muchas cláusulas
- 13. Se une a los índices espaciales mysql
- 14. MySQL - subconsultas y se une a
- 15. rieles -: se une desinfección/sustitución
- 16. ¿Qué se une con SQLite?
- 17. ¿Cuál es la diferencia entre la izquierda se une y derecha se une en MySQL
- 18. rieles named_scopes con une
- 19. Boost pitón que une
- 20. SQL múltiple une
- 21. Cruz se une Contexto - LINQ/C#
- 22. NHibernate - Izquierda une
- 23. Boost que une fallar
- 24. LINQ to NHibernate duplicados se une
- 25. Kohana 3.2 'avance' ORM se une
- 26. ¿Cómo anidar se une con CakePHP?
- 27. Understanding Rails ActiveRecord "single model" se une a sí mismo
- 28. ¿Cómo se une DataGrid a las propiedades de cualquier colección?
- 29. consultas de Oracle a MySQL izquierda se une
- 30. TemplateBinding no se une a la propiedad del efecto?
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
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. –