mysql - ¿cuántas columnas son demasiadas?


Estoy configurando una tabla que podría tener más de 70 columnas. Ahora estoy pensando en dividirlo ya que algunos de los datos en las columnas no serán necesarios cada vez que se acceda a la tabla. Por otra parte, si hago esto me quedo con tener que usar joins.

¿En qué punto, si hay alguno, se considera demasiadas columnas?

 90
Author: OMG Ponies, 2009-09-25

3 answers

Se considera que es demasiado una vez que está por encima del límite máximo soportado por la base de datos.

El hecho de que no necesite que cada columna sea devuelta por cada consulta es perfectamente normal; es por eso que la instrucción SELECT le permite nombrar explícitamente las columnas que necesita.

Como regla general, su estructura de tabla debe reflejar su modelo de dominio; si realmente tiene 70 (100, lo que tiene) atributos que pertenecen a la misma entidad, no hay razón para separarlos en múltiples mesas.

 118
Author: ChssPly76,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-24 07:46:13

Hay algunos beneficios de dividir la tabla en varias con menos columnas, que también se llama Partición vertical. Aquí están algunos:

  1. Si tiene tablas con muchas filas, modificar los índices puede llevar mucho tiempo, ya que MySQL necesita reconstruir todos los índices de la tabla. Tener los índices divididos en varias tablas podría hacerlo más rápido.

  2. Dependiendo de sus consultas y tipos de columna, MySQL podría estar escribiendo tablas temporales (utilizado en consultas de selección más complejas) al disco. Esto es malo, ya que la e/s del disco puede ser un gran cuello de botella. Esto ocurre si tiene datos binarios (texto o blob) en la consulta.

  3. Una tabla más amplia puede conducir a un rendimiento de consulta más lento.

No optimices prematuramente, pero en algunos casos, puedes obtener mejoras de tablas más estrechas.

 22
Author: jonstjohn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-24 21:03:52

Es demasiado cuando viola las reglas de normalización. Es bastante difícil obtener tantas columnas si está normalizando su base de datos. Diseñe su base de datos para modelar el problema, no alrededor de reglas artificiales o ideas sobre la optimización para una plataforma de bases de datos específica.

Aplique las siguientes reglas a la tabla ancha y es probable que tenga muchas menos columnas en una sola tabla.

  1. Sin elementos repetitivos o grupos de elementos
  2. No hay dependencias parciales en un clave concatenada
  3. Sin dependencias en atributos no clave

Aquí hay un enlace para ayudarte.

 12
Author: JohnFx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-24 21:14:02