2011-10-28 21 views
8

Estoy tratando de optimizar mi base de datos. Para poder hacerlo, necesito poder determinar la entrada de datos más larga en una columna varchar, y luego recortar la definición de la columna justo por encima de eso.MySQL Determinar la longitud más larga de VarChar

¿Cómo puedo averiguar, usando sql, la longitud de la entrada varchar más larga en mi tabla?

CREATE TABLE `poller_output` (
    `local_data_id` mediumint(8) unsigned NOT NULL DEFAULT '0', 
    `rrd_name` varchar(19) NOT NULL DEFAULT '', 
    `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `output` varchar(200) NOT NULL DEFAULT '', 
    PRIMARY KEY (`local_data_id`,`rrd_name`,`time`) 
) ENGINE=MEMORY DEFAULT CHARSET=utf8 

Respuesta

18

Si desea saber la longitud máxima del campo output, por ejemplo, puede utilizar esta consulta:

SELECT Max(CHAR_LENGTH(`output`)) AS Max FROM `poller_output` 
+0

perfecto ... exactamente lo que estaba buscando. – Jericon

+0

ty para la respuesta útil; Sugiero que todos también vean la publicación de hudons – user2426679

8

Usted puede hacer esto mediante el uso de la siguiente declaración

SELECT column_name FROM database.table PROCEDURE ANALYSE(1,1); 

El valor Max_length de los resultados de esto le dará el varchar más largo en esa columna.

Así que en este caso suponiendo que desea investigar la columna de salida a continuación, puede ejecutar el siguiente

SELECT output FROM poller_output PROCEDURE ANALYSE(1,1); 

La ventaja de esto es que también le dará la FieldType óptimo en los valores de retorno que serán algo en la línea de

VARCHAR(56) NOT NULL 
+2

+1 - Creo que esta es una mejor respuesta con respecto a la optimización de su base de datos. Te da mucho más que solo la longitud. – Fenton

-3

las garrapatas de la espalda y la función char_length en la respuesta de Aurelio ambos causan errores. This la respuesta funciona.

0

Voy a publicar la respuesta en la pregunta que hice:

SELECT CHARACTER_MAXIMUM_LENGTH 
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'Database' 
    AND TABLE_NAME = 'Table' 
    AND COLUMN_NAME = 'Field' 
Cuestiones relacionadas