8 Índices
Ya hemos visto algo sobre índices, cuando hablamos de las restricciones PRIMARY KEY y UNIQUE. Ahora veremos los índices en mayor detalle.
Los índices pueden ser creados en el momento de crear la tabla, ya sea mediante restricciones de columna:
sqlite> CREATE TABLE prueba( ...> clave INTEGER PRIMARY KEY, ...> texto TEXT); sqlite> CREATE TABLE prueba2( ...> clave INTEGER CONTRAINT primaria PRIMARY KEY, ...> texto TEXT); sqlite>
O mediante restricciones de tabla:
sqlite> CREATE TABLE prueba3( ...> clave INTEGER, ...> texto TEXT, ...> PRIMARY KEY (clave)); sqlite> CREATE TABLE prueba4( ...> clave INTEGER, ...> texto TEXT, ...> CONSTRAINT primaria PRIMARY KEY (clave)); sqlite>
La ventaja de este segundo método es que permite crear claves primaras sobre varias columnas:
sqlite> CREATE TABLE prueba5( ...> clave1 INTEGER, ...> clave2 INTEGER, ...> texto TEXT, ...> PRIMARY KEY (clave1,clave2)); sqlite>
La forma CONSTRAINT <identificador> ... permite crear identificadores para los índices asociados a la restricción. Esos identificadores se suelen usar para modificar (o alterar) las restricciones o para eliminarlas. En SQLite no les he encontrado ninguna utilidad.
Las mismas formas se pueden usar para crear claves únicas:
sqlite> CREATE TABLE prueba6( ...> clave INTEGER, ...> texto TEXT, ...> UNIQUE (clave)); sqlite>
Crear índices
También podemos crear índices sobre tablas existentes, o eliminarlos. Para ello disponemos de las sentencias CREATE INDEX y DROP INDEX.
sqlite> CREATE INDEX orden1 ON prueba3 (texto DESC); sqlite> CREATE INDEX orden2 ON prueba4 (texto ASC,clave DESC); sqlite> CREATE UNIQUE INDEX orden3 ON prueba5 (clave1 DESC); sqlite>
Podemos usar estos índices para obtener consultas ordenadas de forma más eficiente. Si existe un índice para un orden determinado, SQLite usará ese índice, evitando el gasto de tiempo y recursos de hacer una ordenación en el momento en que se necesita.
Borrar índices
Eliminar estos índices es muy sencillo:
sqlite> DROP INDEX orden1; sqlite>