SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
Alumna
Adriana Berenice Saucedo Guerrero
Profesor
Omar Emmanuel Lara Juarez
Materia
Base de Datos II
Grado y Grupo
3° “A”
Carrera
Tecnologías de la Información y Comunicación
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
INDICE
Que es un Indice ......................................................................................................................................... 3
PARA QUE SIRVEN LOS INDICES...................................................................................................... 4
COMO CREAR INDICES EN WORKBENCH .................................................................................................... 4
ELIMINAR INDICES ...................................................................................................................................... 9
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
Que es un Indice
Los índices en MySQL permiten localizar y devolver registros de una forma sencilla y
rápida. Son especialmente útiles cuando queremos buscar elementos de entre los
millones y hasta billones de registros que puede contener una tabla en un momento
dado. Cuando no usamos índices, a veces podemos percibir que MySQL tarda
demasiado en responder una consulta o, incluso para usuarios inexpertos, puede
parecer que se ha creado un índice pero que no se siente una mejora en la velocidad.
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
PARA QUE SIRVEN LOS INDICES
Los índices son usados para encontrar rápidamente los registros que tengan un
determinado valor en alguna de sus columnas. Sin un índice, MySQL tiene que iniciar
con el primer registro y leer a través de toda la tabla para encontrar los registros
relevantes. Aún en tablas pequeñas, de unos 1000 registros, es por lo menos 100 veces
más rápido leer los datos usando un índice, que haciendo una lectura secuencial.
Cuando MySQL trata de responder una consulta, examina una variedad de estadísticas
acerca de nuestros datos y decide como buscar los datos que deseamos de la manera
más rápida. Sin embargo, como se acaba de mencionar, cuando en una tabla no existen
índices en los cuales pueda auxiliarse MySQL para resolver una consulta se tendrán que
leer todos los registros de la tabla de manera secuencial. Esto es comúnmente llamado
un "escaneo completo de una tabla", y es muchas veces algo que se debe evitar. En
particular, debemos evitar las escaneos completos de tablas por las siguientes razones:
 Sobrecarga de CPU. El proceso de checar cada uno de los registros en una tabla
es insignificante cuando se tienen pocos datos, pero puede convertirse en un
problema a medida que va aumentando la cantidad de registros en nuestra tabla.
Existe una relación proporcional entre el número de registros que tiene una tabla
y la cantidad de tiempo que le toma a MySQL revisarla completamente.
 Concurrencia. Mientras MySQL está leyendo los datos de una tabla, éste la
bloquea, de tal manera que nadie más puede escribir en ella, aunque si pueden
leerla. Cuando MySQL está actualizando o eliminando filas de una tabla, éste la
bloquea, y por lo tanto nadie puede al menos leerla.
 Sobrecarga de disco. En una tabla muy grande, un escaneo completo consume
una gran cantidad de entrada/salida en el disco. Esto puede alentar
siginificativamente nuestro servidor de bases de datos, especialmente si tenemos
un disco IDE algo antiguo.
COMO CREAR INDICES EN WORKBENCH
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON tbl_name (index_col_name,...)
index_col_name:
col_name [(length)] [ASC | DESC]
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
En MySQL 5.0, CREATE INDEX se mapea a un comando ALTER TABLE para crear
índices. Consulte Normalmente, crea todos los índices en una tabla cuando se crea la
propia tabla con CREATE TABLE. Consulte. 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, usandocol_name(length) para indexar un prefijo consistente en
los primeros 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, oBDB .
 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.
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
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 type_name.
Los valores 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 type_name puede usarse como sinónimo de USING type_name para
especificar un tipo de índice. Sin embargo, 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, TYPEno
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.
Índices FULLTEXT en MySQL puede indexar sólo columnas CHAR, VARCHAR,
y TEXT , y sólo en tablas MyISAM .
Ejemplo
CREATE TABLE `tbl_example` (
`tbl_example_ID` INT(10) UNSIGNED NOT NULL ,
`field1` VARCHAR(45) NULL ,
`field2` VARCHAR(45) NULL ,
PRIMARY KEY (`tbl_example_ID`) ,
UNIQUE INDEX `tbl_example_ID_UNIQUE` (`tbl_example_ID` ASC) )
ENGINE = MyISAM
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
ALTER TABLE le permite cambiar la estructura de una tabla existente. Por ejemplo,
puede añadir o borrar columnas, crear o destruir índices, cambiar el tipo de columnas
existentes, o renombrar columnas o la misma tabla. Puede cambiar el comentario de la
tabla y su tipo.
La sintaxis para varias de las alteraciones permitidas es similar a cláusulas del
comando CREATE TABLE. Esto incluye modificaciones table_options , para opciones
tales como ENGINE, AUTO_INCREMENT, yAVG_ROW_LENGTH. Algunas
operaciones pueden producir advertencias si se intentan en una tabla para que el motor
de almacenamiento no soporte la operación. Estas advertencias pueden mostrarse
con SHOW WARNINGSSi usa ALTER TABLE para cambiar la especificación de una
columna pero DESCRIBE tbl_name indica que la columna no ha cambiado, es posible
que MySQL haya ignorado las modificaciones por alguna de las razones descrita.
Índices de clave primaria
Una clave primaria es un índice sobre uno o más campos donde cada valor es único y
ninguno de los valores son NULL.
Para crear un índice de clave primaria tenemos básicamente dos opciones:
1. Crear el índice de clave primaria al momento de crear la tabla. En este caso se usa
la opción PRIMARY KEY al final de la definición de los campos, con una lista de los
campos que serán parte del índice.
CREATE TABLE nombreTabla(campo1 tipoDato,
[campo2...,] PRIMARY KEY (campo1 [,campo2...]) );
Hacemos énfasis en que la palabra clave NOT NULL es obligatoria para un campo
cuando éste vaya a formar parte de una clave primaria; como mencionamos
anteriormente, las claves primarias no pueden contener valores nulos. Si intentamos
crear una clave primaria sobre un campo nulo, MySQL nos marcará un error.
2. Crear una clave primaria en una tabla existente con el uso del comando ALTER
TABLE:
ALTER TABLE nombreTabla ADD PRIMARY KEY(campo1 [,campo2...]);
Por ejemplo, suponiendo que ya tenemos en nuestro sistema una tabla que fue creada
de la siguiente manera (sin clave primaria, y con el campo id aceptando valores NUL):
CREATE TABLE usuarios(id int, nombre varchar(50), apellidos varchar(70));
Podemos crear una clave primaria sobre el campo id con esta sentencia:
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
ALTER TABLE usuarios MODIFY id INT NOT NULL, ADD PRIMARY KEY(id);
Para observar los cambios que hemos hecho, podemos examinar las columnas de la
tabla usuarios con una sentencia DESCRIBE:
mysql> DESCRIBE usuarios;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int(11) | | PRI | 0 | |
| nombre | varchar(50) | YES | | NULL | |
| apellidos | varchar(70) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
El campo id no tiene un valor YES en la columna Null, lo que indica que este campo ya
no podrá almacenar valores nulos. Se puede observar también que se tiene un valor
PRI en la columna Key, lo que indica que este campo es una clave primaria.
Las claves primarias pueden constar de más de un campo. Hay algunas veces en las
que un solo campo no puede identificar de manera única a un registro.
Índices ordinarios
Un índice que no es primario permite valores duplicados (a menos que los campos
hayan sido especificados como UNIQUE).
Para crear un índice ordinario tenemos básicamente dos opciones:
1. Podemos crear un índice ordinario al mismo tiempo que creamos la tabla con el uso
de la opción INDEX.
CREATE TABLE nombreTabla(campo1 tipoDato, campo2 tipoDato,..
INDEX [nombreIndice] (campo1 [,campo2...]));
2. De igual manera, podemos crear el índice con el uso de la sentencia ALTER TABLE
si es que la tabla ya existe.
ALTER TABLE nombreTabla ADD INDEX [nombreIndice] (campo1 [,campo2...]);
También es posible usar la sentencia CREATE INDEX para crear un índice en una
tabla existente.
CREATE INDEX nombreIndice ON nombreTabla(campo1 [,campo2...]);
Ambas sentencias piden el nombre del índice, sin embargo con la sentencia CREATE
INDEX el nombre es obligatorio.
Por ejemplo, para la siguiente definición de tabla:
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
CREATE TABLE usuarios(id int, nombre varchar(50), apellidos varchar(70));
Se puede crear un índice en la columna apellidos con una sentencia ALTER TABLE:
ALTER TABLE usuarios ADD INDEX idx_apellidos (apellidos);
O bien, con una sentencia CREATE INDEX:
CREATE INDEX idx_apellidos ON usuarios(apellidos);
ELIMINAR INDICES
. Cuando hagamos algún cambio en el índice, necesitamos eliminar primero el índice y
entonces reconstruirlo con la nueva definición.
Para eliminar un índice de clave primaria podemos usar la siguiente sintaxis:
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
ALTER TABLE nombreTabla DROP PRIMARY KEY;
Para eliminar un índice ordinario, único, o de texto completo, necesitamos especificar el
nombre del índice y usar esta sintaxis:
ALTER TABLE nombreTabla DROP INDEX nombreIndice;
También es válida esta otra sintaxis:
DROP INDEX nombreIndice ON nombreTabla;
Si no estamos seguros de cuál es el nombre del índice que deseamos eliminar,
podemos hacer uso de la sentencia SHOW KEYS:
SHOW KEYS FROM nombreTabla;
Este es un ejemplo.
CREATE TABLE usuarios
(
id INT NOT,
nombre VARCHAR(50) NOT NULL,
apellidos VARCHAR(70) NOT NULL,
PRIMARY KEY (id),
INDEX (nombre, apellidos)
);
Veamos los índices que existen en esta tabla:
mysql> SHOW KEYS FROM usuarios;
+----------+------------+----------+--------------+-------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name |
+----------+------------+----------+--------------+-------------+ .
| usuarios | 0 | PRIMARY | 1 | id | .
| usuarios | 1 | nombre | 1 | nombre | .
| usuarios | 1 | nombre | 2 | apellidos |
+----------+------------+----------+--------------+-------------+
3 rows in set (0.00 sec)
La tercera columna es la que nos proporciona los nombres de los índices. Podemos
observar que al no especificar un nombre al índice ordinario en (nombre, apellidos), se
le ha asignado el nombre de la primera columna que forma el índice.
A continuación vamos a eliminar los dos índices que existen en esta tabla:
mysql> ALTER TABLE usuarios DROP PRIMARY KEY;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE usuarios DROP INDEX nombre;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Por último, podemos verificar que estos índices ya no existen:
mysql> SHOW KEYS FROM usuarios;
Empty set (0.00 sec)
MODIFICAR
Universidad Tecnológica del Estado de Zacatecas
Unidad Académica de Pinos
Para modificar un indice se puede hacer de la siguiente manera
1 alter table users add index `idx_nick` (`nick_usuario`);
Donde idx_nick es el nombre del indice que estamos creando y nick_usuario el campo
en la tabla que vamos a indexar.
Para añadir un nuevo indice compuesto se puede hacer de la siguiente manera
1 alter table users add index `idx_logins` (`id`, `username`, `status`, `email`)
Esto puede dar lugar a veces a que el tamaño del indice que estamos generando es
demasiado grande.
specified key was too long; max key lenght is 1000 bytes Para ello vamos ajustando el
tamaño que asignamos a cada campo para el indice.
1 alter table users add index `idx_logins` (`id`, `username`(200), `status`, `email`(100))

Más contenido relacionado

La actualidad más candente

ORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓN
ORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓNORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓN
ORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓN
standarman
 
caracteristicas de una base de datos
caracteristicas de una base de datoscaracteristicas de una base de datos
caracteristicas de una base de datos
brayanalejandro0125
 
Sentencias dml y ddl
Sentencias dml y ddlSentencias dml y ddl
Sentencias dml y ddl
kleberyauti
 
Capitulo 8 la tabla de enrutamiento
Capitulo 8 la tabla de enrutamientoCapitulo 8 la tabla de enrutamiento
Capitulo 8 la tabla de enrutamiento
TeleredUSM
 
Comandos utilizados en sql
Comandos utilizados en sqlComandos utilizados en sql
Comandos utilizados en sql
Byron Eras
 

La actualidad más candente (20)

Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
ORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓN
ORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓNORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓN
ORGANIZACIONES NACIONALES E INTERNACIONALES DE ESTANDARIZACIÓN
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
Crear base de datos mysql command
Crear base de datos mysql commandCrear base de datos mysql command
Crear base de datos mysql command
 
El estándar 802.11 (infografía)
El estándar 802.11 (infografía)El estándar 802.11 (infografía)
El estándar 802.11 (infografía)
 
caracteristicas de una base de datos
caracteristicas de una base de datoscaracteristicas de una base de datos
caracteristicas de una base de datos
 
Sentencias dml y ddl
Sentencias dml y ddlSentencias dml y ddl
Sentencias dml y ddl
 
Cuestionario 2
Cuestionario 2Cuestionario 2
Cuestionario 2
 
Capitulo 8 la tabla de enrutamiento
Capitulo 8 la tabla de enrutamientoCapitulo 8 la tabla de enrutamiento
Capitulo 8 la tabla de enrutamiento
 
Comandos utilizados en sql
Comandos utilizados en sqlComandos utilizados en sql
Comandos utilizados en sql
 
Unidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualUnidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos Conceptual
 
Actividad 3: VLAN y ACL
Actividad 3: VLAN y ACLActividad 3: VLAN y ACL
Actividad 3: VLAN y ACL
 
Interfaces para sistemas de gestión de bases de datos
Interfaces para sistemas de gestión de bases de datosInterfaces para sistemas de gestión de bases de datos
Interfaces para sistemas de gestión de bases de datos
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacion
 
Estandares protocolo 802.11
Estandares protocolo 802.11Estandares protocolo 802.11
Estandares protocolo 802.11
 
Introducción a Sql
Introducción a SqlIntroducción a Sql
Introducción a Sql
 
Tuning fondo-negro-2
Tuning fondo-negro-2Tuning fondo-negro-2
Tuning fondo-negro-2
 
Lenguaje SQL
Lenguaje SQLLenguaje SQL
Lenguaje SQL
 
Sql presentacion
Sql presentacionSql presentacion
Sql presentacion
 
Direccionamiento
DireccionamientoDireccionamiento
Direccionamiento
 

Similar a Indices en workbench

Presentacion Sql
Presentacion SqlPresentacion Sql
Presentacion Sql
guest5f0fa0
 
Estructura de una tabla sql
Estructura de una tabla sqlEstructura de una tabla sql
Estructura de una tabla sql
Andreita Bedoya
 
Investigacion alter, create y integridad referencial
Investigacion alter, create y integridad referencialInvestigacion alter, create y integridad referencial
Investigacion alter, create y integridad referencial
500y
 
Modulo de programacion sql unidad II
Modulo de programacion sql   unidad IIModulo de programacion sql   unidad II
Modulo de programacion sql unidad II
firemas
 
Trabajando con sql (parte 1)
Trabajando con sql (parte 1)Trabajando con sql (parte 1)
Trabajando con sql (parte 1)
Juan Vade
 
BD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQLBD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQL
demoiselle
 

Similar a Indices en workbench (20)

Diapositivas de tablas y tipos de datos
Diapositivas de tablas y tipos de datosDiapositivas de tablas y tipos de datos
Diapositivas de tablas y tipos de datos
 
Presentacion Sql
Presentacion SqlPresentacion Sql
Presentacion Sql
 
Sentencias Sql
Sentencias SqlSentencias Sql
Sentencias Sql
 
Estructura de una tabla sql
Estructura de una tabla sqlEstructura de una tabla sql
Estructura de una tabla sql
 
11. indices en my sql
11. indices en my sql11. indices en my sql
11. indices en my sql
 
Clase 2 El lenguaje DDL de SQL
Clase 2 El lenguaje DDL de SQLClase 2 El lenguaje DDL de SQL
Clase 2 El lenguaje DDL de SQL
 
Indices y Vistas.pptx
Indices y Vistas.pptxIndices y Vistas.pptx
Indices y Vistas.pptx
 
Presentación1
Presentación1Presentación1
Presentación1
 
Diapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base DatosDiapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base Datos
 
TABLAS Y TIPOS DE DATOS
TABLAS Y TIPOS DE DATOSTABLAS Y TIPOS DE DATOS
TABLAS Y TIPOS DE DATOS
 
Curso oracle por temas
Curso oracle por temasCurso oracle por temas
Curso oracle por temas
 
Investigacion alter, create y integridad referencial
Investigacion alter, create y integridad referencialInvestigacion alter, create y integridad referencial
Investigacion alter, create y integridad referencial
 
ManualPracticoSQL.pdf
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdf
 
Modulo de programacion sql unidad II
Modulo de programacion sql   unidad IIModulo de programacion sql   unidad II
Modulo de programacion sql unidad II
 
210927124637-Manual MySQL.pdf
210927124637-Manual MySQL.pdf210927124637-Manual MySQL.pdf
210927124637-Manual MySQL.pdf
 
Manual MySQL.pdf
Manual MySQL.pdfManual MySQL.pdf
Manual MySQL.pdf
 
Trabajando con sql (parte 1)
Trabajando con sql (parte 1)Trabajando con sql (parte 1)
Trabajando con sql (parte 1)
 
SENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVERSENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVER
 
Tablas y tipos de datos
Tablas y tipos de datosTablas y tipos de datos
Tablas y tipos de datos
 
BD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQLBD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQL
 

Más de Adriiana Guerrero (18)

Plantilla unidad i lucy
Plantilla unidad i lucyPlantilla unidad i lucy
Plantilla unidad i lucy
 
Plantilla unidad i Auditoria
Plantilla unidad i AuditoriaPlantilla unidad i Auditoria
Plantilla unidad i Auditoria
 
Cuadernillo de calidad
Cuadernillo de calidadCuadernillo de calidad
Cuadernillo de calidad
 
Trabajo final desarrollo de aplicaciones
Trabajo final desarrollo de aplicacionesTrabajo final desarrollo de aplicaciones
Trabajo final desarrollo de aplicaciones
 
Trabajo final ii metricas de mc call
Trabajo final ii metricas de mc callTrabajo final ii metricas de mc call
Trabajo final ii metricas de mc call
 
Metricas
MetricasMetricas
Metricas
 
Trabajo final calidad
Trabajo final calidadTrabajo final calidad
Trabajo final calidad
 
Tabla comparativa aplicacionestradicionales y RIA, Web1.0 y web 2.0
Tabla comparativa aplicacionestradicionales y RIA, Web1.0 y web 2.0Tabla comparativa aplicacionestradicionales y RIA, Web1.0 y web 2.0
Tabla comparativa aplicacionestradicionales y RIA, Web1.0 y web 2.0
 
Tabla comparativa p
Tabla comparativa pTabla comparativa p
Tabla comparativa p
 
Tabla comparativa
Tabla comparativaTabla comparativa
Tabla comparativa
 
Patron de diseño y Modelo vista contralor
Patron de diseño y Modelo vista contralorPatron de diseño y Modelo vista contralor
Patron de diseño y Modelo vista contralor
 
A3 ap auditoria_bimbo
A3 ap auditoria_bimboA3 ap auditoria_bimbo
A3 ap auditoria_bimbo
 
Manual de windows
Manual de windowsManual de windows
Manual de windows
 
Derecho de autor
Derecho de autorDerecho de autor
Derecho de autor
 
Manual de organizacion
Manual de organizacionManual de organizacion
Manual de organizacion
 
Trabajo final
Trabajo finalTrabajo final
Trabajo final
 
´Protocolo estado enlace
´Protocolo estado enlace´Protocolo estado enlace
´Protocolo estado enlace
 
´Protocolo estado enlace
´Protocolo estado enlace´Protocolo estado enlace
´Protocolo estado enlace
 

Indices en workbench

  • 1. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos Alumna Adriana Berenice Saucedo Guerrero Profesor Omar Emmanuel Lara Juarez Materia Base de Datos II Grado y Grupo 3° “A” Carrera Tecnologías de la Información y Comunicación
  • 2. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos INDICE Que es un Indice ......................................................................................................................................... 3 PARA QUE SIRVEN LOS INDICES...................................................................................................... 4 COMO CREAR INDICES EN WORKBENCH .................................................................................................... 4 ELIMINAR INDICES ...................................................................................................................................... 9
  • 3. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos Que es un Indice Los índices en MySQL permiten localizar y devolver registros de una forma sencilla y rápida. Son especialmente útiles cuando queremos buscar elementos de entre los millones y hasta billones de registros que puede contener una tabla en un momento dado. Cuando no usamos índices, a veces podemos percibir que MySQL tarda demasiado en responder una consulta o, incluso para usuarios inexpertos, puede parecer que se ha creado un índice pero que no se siente una mejora en la velocidad.
  • 4. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos PARA QUE SIRVEN LOS INDICES Los índices son usados para encontrar rápidamente los registros que tengan un determinado valor en alguna de sus columnas. Sin un índice, MySQL tiene que iniciar con el primer registro y leer a través de toda la tabla para encontrar los registros relevantes. Aún en tablas pequeñas, de unos 1000 registros, es por lo menos 100 veces más rápido leer los datos usando un índice, que haciendo una lectura secuencial. Cuando MySQL trata de responder una consulta, examina una variedad de estadísticas acerca de nuestros datos y decide como buscar los datos que deseamos de la manera más rápida. Sin embargo, como se acaba de mencionar, cuando en una tabla no existen índices en los cuales pueda auxiliarse MySQL para resolver una consulta se tendrán que leer todos los registros de la tabla de manera secuencial. Esto es comúnmente llamado un "escaneo completo de una tabla", y es muchas veces algo que se debe evitar. En particular, debemos evitar las escaneos completos de tablas por las siguientes razones:  Sobrecarga de CPU. El proceso de checar cada uno de los registros en una tabla es insignificante cuando se tienen pocos datos, pero puede convertirse en un problema a medida que va aumentando la cantidad de registros en nuestra tabla. Existe una relación proporcional entre el número de registros que tiene una tabla y la cantidad de tiempo que le toma a MySQL revisarla completamente.  Concurrencia. Mientras MySQL está leyendo los datos de una tabla, éste la bloquea, de tal manera que nadie más puede escribir en ella, aunque si pueden leerla. Cuando MySQL está actualizando o eliminando filas de una tabla, éste la bloquea, y por lo tanto nadie puede al menos leerla.  Sobrecarga de disco. En una tabla muy grande, un escaneo completo consume una gran cantidad de entrada/salida en el disco. Esto puede alentar siginificativamente nuestro servidor de bases de datos, especialmente si tenemos un disco IDE algo antiguo. COMO CREAR INDICES EN WORKBENCH CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC]
  • 5. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos En MySQL 5.0, CREATE INDEX se mapea a un comando ALTER TABLE para crear índices. Consulte Normalmente, crea todos los índices en una tabla cuando se crea la propia tabla con CREATE TABLE. Consulte. 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, usandocol_name(length) para indexar un prefijo consistente en los primeros 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, oBDB .  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.
  • 6. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos 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 type_name. Los valores 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 type_name puede usarse como sinónimo de USING type_name para especificar un tipo de índice. Sin embargo, 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, TYPEno 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. Índices FULLTEXT en MySQL puede indexar sólo columnas CHAR, VARCHAR, y TEXT , y sólo en tablas MyISAM . Ejemplo CREATE TABLE `tbl_example` ( `tbl_example_ID` INT(10) UNSIGNED NOT NULL , `field1` VARCHAR(45) NULL , `field2` VARCHAR(45) NULL , PRIMARY KEY (`tbl_example_ID`) , UNIQUE INDEX `tbl_example_ID_UNIQUE` (`tbl_example_ID` ASC) ) ENGINE = MyISAM
  • 7. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos ALTER TABLE le permite cambiar la estructura de una tabla existente. Por ejemplo, puede añadir o borrar columnas, crear o destruir índices, cambiar el tipo de columnas existentes, o renombrar columnas o la misma tabla. Puede cambiar el comentario de la tabla y su tipo. La sintaxis para varias de las alteraciones permitidas es similar a cláusulas del comando CREATE TABLE. Esto incluye modificaciones table_options , para opciones tales como ENGINE, AUTO_INCREMENT, yAVG_ROW_LENGTH. Algunas operaciones pueden producir advertencias si se intentan en una tabla para que el motor de almacenamiento no soporte la operación. Estas advertencias pueden mostrarse con SHOW WARNINGSSi usa ALTER TABLE para cambiar la especificación de una columna pero DESCRIBE tbl_name indica que la columna no ha cambiado, es posible que MySQL haya ignorado las modificaciones por alguna de las razones descrita. Índices de clave primaria Una clave primaria es un índice sobre uno o más campos donde cada valor es único y ninguno de los valores son NULL. Para crear un índice de clave primaria tenemos básicamente dos opciones: 1. Crear el índice de clave primaria al momento de crear la tabla. En este caso se usa la opción PRIMARY KEY al final de la definición de los campos, con una lista de los campos que serán parte del índice. CREATE TABLE nombreTabla(campo1 tipoDato, [campo2...,] PRIMARY KEY (campo1 [,campo2...]) ); Hacemos énfasis en que la palabra clave NOT NULL es obligatoria para un campo cuando éste vaya a formar parte de una clave primaria; como mencionamos anteriormente, las claves primarias no pueden contener valores nulos. Si intentamos crear una clave primaria sobre un campo nulo, MySQL nos marcará un error. 2. Crear una clave primaria en una tabla existente con el uso del comando ALTER TABLE: ALTER TABLE nombreTabla ADD PRIMARY KEY(campo1 [,campo2...]); Por ejemplo, suponiendo que ya tenemos en nuestro sistema una tabla que fue creada de la siguiente manera (sin clave primaria, y con el campo id aceptando valores NUL): CREATE TABLE usuarios(id int, nombre varchar(50), apellidos varchar(70)); Podemos crear una clave primaria sobre el campo id con esta sentencia:
  • 8. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos ALTER TABLE usuarios MODIFY id INT NOT NULL, ADD PRIMARY KEY(id); Para observar los cambios que hemos hecho, podemos examinar las columnas de la tabla usuarios con una sentencia DESCRIBE: mysql> DESCRIBE usuarios; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | id | int(11) | | PRI | 0 | | | nombre | varchar(50) | YES | | NULL | | | apellidos | varchar(70) | YES | | NULL | | +-----------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) El campo id no tiene un valor YES en la columna Null, lo que indica que este campo ya no podrá almacenar valores nulos. Se puede observar también que se tiene un valor PRI en la columna Key, lo que indica que este campo es una clave primaria. Las claves primarias pueden constar de más de un campo. Hay algunas veces en las que un solo campo no puede identificar de manera única a un registro. Índices ordinarios Un índice que no es primario permite valores duplicados (a menos que los campos hayan sido especificados como UNIQUE). Para crear un índice ordinario tenemos básicamente dos opciones: 1. Podemos crear un índice ordinario al mismo tiempo que creamos la tabla con el uso de la opción INDEX. CREATE TABLE nombreTabla(campo1 tipoDato, campo2 tipoDato,.. INDEX [nombreIndice] (campo1 [,campo2...])); 2. De igual manera, podemos crear el índice con el uso de la sentencia ALTER TABLE si es que la tabla ya existe. ALTER TABLE nombreTabla ADD INDEX [nombreIndice] (campo1 [,campo2...]); También es posible usar la sentencia CREATE INDEX para crear un índice en una tabla existente. CREATE INDEX nombreIndice ON nombreTabla(campo1 [,campo2...]); Ambas sentencias piden el nombre del índice, sin embargo con la sentencia CREATE INDEX el nombre es obligatorio. Por ejemplo, para la siguiente definición de tabla:
  • 9. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos CREATE TABLE usuarios(id int, nombre varchar(50), apellidos varchar(70)); Se puede crear un índice en la columna apellidos con una sentencia ALTER TABLE: ALTER TABLE usuarios ADD INDEX idx_apellidos (apellidos); O bien, con una sentencia CREATE INDEX: CREATE INDEX idx_apellidos ON usuarios(apellidos); ELIMINAR INDICES . Cuando hagamos algún cambio en el índice, necesitamos eliminar primero el índice y entonces reconstruirlo con la nueva definición. Para eliminar un índice de clave primaria podemos usar la siguiente sintaxis:
  • 10. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos ALTER TABLE nombreTabla DROP PRIMARY KEY; Para eliminar un índice ordinario, único, o de texto completo, necesitamos especificar el nombre del índice y usar esta sintaxis: ALTER TABLE nombreTabla DROP INDEX nombreIndice; También es válida esta otra sintaxis: DROP INDEX nombreIndice ON nombreTabla; Si no estamos seguros de cuál es el nombre del índice que deseamos eliminar, podemos hacer uso de la sentencia SHOW KEYS: SHOW KEYS FROM nombreTabla; Este es un ejemplo. CREATE TABLE usuarios ( id INT NOT, nombre VARCHAR(50) NOT NULL, apellidos VARCHAR(70) NOT NULL, PRIMARY KEY (id), INDEX (nombre, apellidos) ); Veamos los índices que existen en esta tabla: mysql> SHOW KEYS FROM usuarios; +----------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +----------+------------+----------+--------------+-------------+ . | usuarios | 0 | PRIMARY | 1 | id | . | usuarios | 1 | nombre | 1 | nombre | . | usuarios | 1 | nombre | 2 | apellidos | +----------+------------+----------+--------------+-------------+ 3 rows in set (0.00 sec) La tercera columna es la que nos proporciona los nombres de los índices. Podemos observar que al no especificar un nombre al índice ordinario en (nombre, apellidos), se le ha asignado el nombre de la primera columna que forma el índice. A continuación vamos a eliminar los dos índices que existen en esta tabla: mysql> ALTER TABLE usuarios DROP PRIMARY KEY; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE usuarios DROP INDEX nombre; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 Por último, podemos verificar que estos índices ya no existen: mysql> SHOW KEYS FROM usuarios; Empty set (0.00 sec) MODIFICAR
  • 11. Universidad Tecnológica del Estado de Zacatecas Unidad Académica de Pinos Para modificar un indice se puede hacer de la siguiente manera 1 alter table users add index `idx_nick` (`nick_usuario`); Donde idx_nick es el nombre del indice que estamos creando y nick_usuario el campo en la tabla que vamos a indexar. Para añadir un nuevo indice compuesto se puede hacer de la siguiente manera 1 alter table users add index `idx_logins` (`id`, `username`, `status`, `email`) Esto puede dar lugar a veces a que el tamaño del indice que estamos generando es demasiado grande. specified key was too long; max key lenght is 1000 bytes Para ello vamos ajustando el tamaño que asignamos a cada campo para el indice. 1 alter table users add index `idx_logins` (`id`, `username`(200), `status`, `email`(100))