CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEXindex_name
[USINGindex_type
] ONtbl_name
(index_col_name
,...)index_col_name
:col_name
[(length
)] [ASC | DESC]
En MySQL 5.0, CREATE INDEX
se mapea a un
comando ALTER TABLE
para crear índices.
Consulte Sección 13.1.2, “Sintaxis de ALTER TABLE
”.
Normalmente, crea todos los índices en una tabla cuando se crea
la propia tabla con CREATE TABLE
. Consulte
Sección 13.1.5, “Sintaxis de CREATE TABLE
”. CREATE INDEX
le permite añadir índices a tablas existentes.
Una lista de columnas de la forma
(col1,col2,...)
crea un índice de múltiples
columnas. Los valores de índice se forman al concatenar los
valores de las columnas dadas.
Para columnas CHAR
y
VARCHAR
, los índices pueden crearse para que
usen sólo parte de una columna, usando
para indexar un prefijo consistente en los primeros
col_name
(length
)length
caracteres de cada valor de la
columna. BLOB
t TEXT
pueden indexarse, pero se debe dar una
longitud de prefijo.
El comando mostrado aquí crea un índice usando los primeros 10
caracteres de la columna name
:
CREATE INDEX part_of_name ON customer (name(10));
Como la mayoría de nombres usualmente difieren en los primeros
10 caracteres, este índice no debería ser mucho más lento que
un índice creado con la columna name
entera.
Además, usar columnas parcialmente para índices puede hacer un
fichero índice mucho menor, que puede ahorrar mucho espacio de
disco y además acelarar las operaciones
INSERT
.
Los prefijos pueden tener una longitud de hasta 255 bytes. Para
tablas MyISAM
y InnoDB
en
MySQL 5.0, pueden tener una longitud de hasta 1000 bytes . Tenga
en cuenta que los límites de los prefijos se miden en bytes,
mientras que la longitud de prefijo en comandos CREATE
INDEX
se interpreta como el número de caracteres.
Tenga esto en cuenta cuando especifique una longitud de prefijo
para una columna que use un conjunto de caracteres de múltiples
bytes.
En MySQL 5.0:
Puede añadir un índice en una columna que puede tener
valores NULL
sólo si está usando
MyISAM
, InnoDB
, o
BDB
.
Puede añadir un índice en una columna
BLOB
o TEXT
sólo si
está usando el tipo de tabla MyISAM
,
BDB
, o InnoDB
.
Una especificación index_col_name
puede acabar con ASC
o
DESC
. Estas palabras se permiten para
extensiones futuras para especificar almacenamiento de índice
ascendente o descendente. Actualmente se parsean pero se
ignoran; los valores de índice siempre se almacenan en orden
ascendente.
En MySQL 5.0, algunos motores le permiten especificar un tipo de
índice cuando se crea un índice. La sintaxis para el
especificador index_type
es
USING
.
Los valores type_name
type_name
posibles
soportados por distintos motores se muestran en la siguiente
tabla. Donde se muestran múltiples tipos de índice , el
primero es el tipo por defecto cuando no se especifica
index_type
.
Motor de almacenamiento | Tipos de índice permitidos |
MyISAM |
BTREE |
InnoDB |
BTREE |
MEMORY/HEAP |
HASH , BTREE
|
Ejemplo:
CREATE TABLE lookup (id INT) ENGINE = MEMORY; CREATE INDEX id_index USING BTREE ON lookup (id);
TYPE
puede usarse como sinónimo de type_name
USING
para especificar
un tipo de índice. Sin embargo, type_name
USING
es la
forma preferida. Además, el nombre de índice que precede el
tipo de índice en la especificación de la sintaxis de índice
no es opcional con TYPE
. Esto es debido a
que, en contra de USING
,
TYPE
no es una palabra reservada y se
interpreta como nombre de índice.
Si especifica un tipo de índice que no es legal para un motor de almacenamiento, pero hay otro tipo de índice disponible que puede usar el motor sin afectar los resultados de la consulta, el motor usa el tipo disponible.
Para más información sobre cómo MySQL usa índices, consulte Sección 7.4.5, “Cómo utiliza MySQL los índices”.
Índices FULLTEXT
en MySQL 5.0 puede indexar
sólo columnas CHAR
,
VARCHAR
, y TEXT
, y sólo
en tablas MyISAM
. Consulte
Sección 12.7, “Funciones de búsqueda de texto completo (Full-Text)”.
Índices SPATIAL
en MySQL 5.0 puede indexar
sólo columnas espaciales, y sólo en tablas
MyISAM
. Los tipo de columna espaciales se
describen en Capítulo 18, Extensiones espaciales de MySQL.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.