2012-10-11 17 views
6

¿Cuál es el número máximo de columnas para una clave principal de varias columnas (MySQL)? ¿Depende del tipo de datos de la columna o del motor?MySQL clave principal de multicolumna

+0

su 16 en SQL Server 2008 .. no sé ABT MySQL –

+0

[Este artículo es de 2006] (http : //www.xaprb.com/blog/2006/04/17/max-key-length-in-mysql/) y dice la longitud máxima para la clave principal es 1000 bytes. No estoy seguro si eso ha cambiado desde entonces. – Taryn

+0

Creo que los límites son 1000 bytes para MyiSAM y 3072 para el motor InnoDB. –

Respuesta

6

Sí, depende de motor de almacenamiento.

  • MyISAM:

    The maximum number of columns per index is 16. The maximum key length is 1000 bytes. This can also be changed by changing the source and recompiling. For the case of a key longer than 250 bytes, a larger key block size than the default of 1024 bytes is used.

  • InnoDB:

    The InnoDB internal maximum key length is 3500 bytes, but MySQL itself restricts this to 3072 bytes. This limit applies to the length of the combined index key in a multi-column index.

+0

Gracias. Gran respuesta. –

1

encontré esto:

alguien intentó crear una PK con 2 columnas y recibió este error:
"clave especificada es demasiado largo; longitud de clave máxima es de 1024 bytes" por lo que parece que el máximo son 1024 bytes, no importa el número de columnas, lo que realmente importa es el tipo de var y el espacio asignado.

he visto algunos ejemplos de esta manera:

create table OS_PROPERTYENTRY (entity_name VARCHAR(125) not null, entity_id BIGINT not null, 

entity_key VARCHAR(255) not null date_val DATETIME, primary key (entity_name, entity_id, entity_key)) 

donde

125 * (3 bytes) + 255 * (3 bytes) + 1 * (8 bytes) = 1148 bytes. Por lo tanto, no es posible crear un PK.

echar un vistazo aquí, hablan de ello: https://jira.atlassian.com/browse/CONF-2783

Cuestiones relacionadas