sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo elegir tipos de datos optimizados para columnas [específico de innodb]?

Resumen breve:

(solo mis opiniones)

  1. para la dirección de correo electrónico - VARCHAR(255)
  2. para nombre de usuario - VARCHAR(100) o VARCHAR(255)
  3. para id_nombre de usuario:use INT (a menos que planee tener más de 2 mil millones de usuarios en su sistema)
  4. números de teléfono - INT o VARCHAR o tal vez CHAR (depende de si desea almacenar el formato)
  5. publicaciones - TEXT
  6. fechas - DATE o DATETIME (definitivamente incluye tiempos para cosas como publicaciones o correos electrónicos)
  7. dinero - DECIMAL(11,2)
  8. misc - ver más abajo

En cuanto a usar InnoDB porque VARCHAR se supone que es más rápido, no me preocuparía por eso, ni por la velocidad en general. Utilice InnoDB porque necesita realizar transacciones y/o desea utilizar restricciones de clave externa (FK) para la integridad de los datos. Además, InnoDB usa bloqueo de nivel de fila, mientras que MyISAM solo usa bloqueo de nivel de tabla. Por lo tanto, InnoDB puede manejar niveles más altos de concurrencia mejor que MyISAM. Use MyISAM para usar índices de texto completo y por un poco menos de gastos generales.

Más importante para la velocidad que para el tipo de motor:coloque índices en las columnas en las que necesita buscar rápidamente. Siempre ponga índices en sus columnas de ID/PK, como el id_username que mencioné.

Más detalles:

Aquí hay un montón de preguntas sobre los tipos de datos MySQL y el diseño de la base de datos (advertencia, más de lo que pediste):

Y un par de preguntas sobre cuándo usar el motor InnoDB:

Solo uso tinyint para casi todo (en serio).

Editar - Cómo almacenar "publicaciones:"

A continuación hay algunos enlaces con más detalles, pero aquí está la versión corta. Para almacenar "publicaciones", necesita espacio para una cadena de texto larga. CHAR la longitud máxima es 255, por lo que no es una opción y, por supuesto, CHAR desperdiciaría caracteres no utilizados frente a VARCHAR , que es de longitud variable CHAR .

Antes de MySQL 5.0.3, VARCHAR la longitud máxima era 255, por lo que te quedaría TEXT . Sin embargo, en versiones más nuevas de MySQL, puede usar VARCHAR o TEXT . La elección se reduce a la preferencia, pero hay un par de diferencias. VARCHAR y TEXT la longitud máxima ahora es 65 535, pero puede establecer su propio máximo en VARCHAR . Digamos que cree que sus publicaciones solo necesitarán tener un máximo de 2000, puede configurar VARCHAR(2000) . Si cada vez llegas al límite, puedes ALTER tabla más tarde y llévala a VARCHAR(3000) . Por otro lado, TEXT en realidad almacena sus datos en un BLOB (1). Escuché que puede haber diferencias de rendimiento entre VARCHAR y TEXT , pero no he visto ninguna prueba, por lo que es posible que desee investigar más, pero siempre puede cambiar ese detalle menor en el futuro.

Más importante aún, buscar en esta columna de "publicación" usando un índice de texto completo en lugar de LIKE sería mucho más rápido (2). Sin embargo, debe usar el motor MyISAM para usar el índice de texto completo porque InnoDB no lo admite . En una base de datos MySQL, puede tener una combinación heterogénea de motores para cada tabla, por lo que solo necesita hacer que su tabla de "publicaciones" use MyISAM. Sin embargo, si necesita absolutamente "publicaciones" para usar InnoDB (para transacciones), configure un disparador para actualizar la copia de MyISAM de su tabla de "publicaciones" y use la copia de MyISAM para todas sus búsquedas de texto completo.

Vea la parte inferior para algunas citas útiles.

Por último, aquí hay una excelente publicación sobre los pros y los contras de VARCHAR versus TEXT. También habla del problema de rendimiento: