Está en la página 1de 24

UNIVERSIDAD TÉCNICA DE MANABÍ

DEPARTAMENTO DE INFORMÁTICA

Administración de Base
de Datos

Tercer Semestre
Ing. Lorena Bowen Mendoza
ADMINISTRACIÓN DE BASES DE DATOS

CONTENIDO A TRATAR HOY:


Análisis de consultas de bases de datos.
Indexando texto

Objetivo de la Clase:
✓ Utilizar la herramienta EXPLAIN.
✓Comprender la indexación de archivos de texto

Cognitive Cities Management Research Group (CMMA) 2


ADMINISTRACIÓN DE BASES DE DATOS

INDEXACIÓN
UNIDAD III
INDEXACIÓN
CÓMO ANALIZAR LAS CONSULTAS A LA BASE DE DATOS
• MySQL dispone de la sentencia EXPLAIN SELECT que nos permitirá
obtener información sobre el plan de ejecución de nuestras consultas
realizadas contra nuestra la base de datos.

• Esta sentencia funciona como un SELECT tradicional, pero nos da


información adicional, como las columnas que es recomendable indexar.

EXPLAIN nombre_de_tabla
O:
EXPLAIN SELECT opciones_de_select;

Cognitive Cities Management Research Group (CMMA)


INDEXACIÓN
EXPLAIN

EXPLAIN Cuando se precede una


nombre_de_tabla, es EXPLAIN trabaja con sentencia SELECT con la
palabra EXPLAIN, MySQL
sinónimo de DESCRIBE o SELECT, DELETE, INSERT, muestra información del
SHOW COLUMNS FROM REPLACE, y UPDATE. optimizador sobre el plan de
nombre_de_tabla. ejecución de la sentencia.

El comando ANALYZE
EXPLAIN muestra una
TABLE actualiza las EXPLAIN es una ayuda
línea de información para
estadísticas de la tabla para decidir qué índices
cada tabla utilizada en la
como la cardinalidad de agregar a las tablas.
sentencia SELECT.
sus claves
Cognitive Cities Management Research Group (CMMA)
EXPLAIN

Pero,

¿Qué quiere decir estas columnas?

¿Qué información nos dan?


Cognitive Cities Management Research Group (CMMA)
EXPLAIN
Id: Es el identificador que EXPLAIN asignará a la consulta.

Select Tipo de consulta a analizar. Por ejemplo, si se trata de una consulta sencilla su valor
_type: será SIMPLE.

Table: Nombre de la tabla a la que hacen referencia el resto de datos en la fila. Hay que
tener en cuenta que el orden de las filas será el que utilizará MySQL para acceder a
los datos.

: tabla resultante de la unión de las tabas cuyos campos id son M y N.


: tabla resultante de una tabla derivada cuyo id es N. Una tabla derivada puede ser,
por ejemplo, una subconsulta en la cláusula FROM.
: tabla resultante de una subconsulta materializada cuyo id es N.

Cognitive Cities Management Research Group (CMMA)


EXPLAIN
Partitions: Muestra las particiones cuyos registros coinciden con los de la consulta. Esta
columna sólo se muestra cuando se emplea EXPLAIN PARTITIONS.

Type: El tipo de unión que se está usando. Indica como MySQL combinará los datos
de esa tabla.

System: Tabla con una única fila, por tanto, la respuesta es inmediata.

Const: En la tabla coincide una única fila con los criterios indicados.

Eq_ref: Una fila de la tabla 1 será leída por cada combinación de filas de la
tabla 2. Este tipo es usado cuando todas las partes de un índice se usan en la
consulta y el índice es UNIQUE o PRIMARY KEY.

Ref: Todas las filas con valores en el índice que coincidan serán leídos desde
esta tabla por cada combinación de filas de las tablas previas.
Cognitive Cities Management Research Group (CMMA)
EXPLAIN
Range: Sólo serán recuperadas las filas que estén en un rango dado, usando un índice
para seleccionar las filas. La columna key indica cual índice es usado, y el valor
key_len contiene la parte más grande de la clave que fue usada. La columna ref será
NULL para este tipo.
Index: Escaneo completo de la tabla para cada combinación de filas de las tablas
previas, revisando únicamente el índice.
ALL: Escaneo completo de la tabla para cada combinación de filas. Es el peor caso ya
que revisará todas las filas para cada combinación.

Possible_keys: Posibles índices que utilizará la consulta, aunque podría no usarse ninguno.
Key: Índice utilizado para ejecutar la consulta. Si indica el valor NULL, no se ha
escogido ningún índice.
Cognitive Cities Management Research Group (CMMA)
EXPLAIN
Key_len: Cuanto más pequeño sea este valor, más rápida será la consulta, pues nos
indica la longitud del índice usado, si no se usó ninguno contendrá NULL.

Ref: Muestra qué columnas o constantes son comparadas con el índice


especificado en la columna key.

Rows: Número de filas que MySQL debe analizar para devolver los datos solicitados

Extra: Información complementaria sobre como MySQL ejecutará la consulta. Los


posibles valores en este campo pueden ser:
Distinct: MySQL ha encontrado una fila coincidente con los filtros indicados
y no necesita seguir analizando.
Not exists: MySQL fue capaz de hacer una optimización LEFT JOIN sobre la consulta
y no examinará más filas en la tabla para la combinación de filas previa después de
que encuentre una fila que coincida con el criterio LEFT JOIN.
Cognitive Cities Management Research Group (CMMA)
EXPLAIN
Range checked for each record: No se encontró un índice válido. Para cada combinación de
filas se hará un chequeo para determinar que indice utilizar y en caso de encontrar alguno
válido, lo utilizará.
Using filesort: Este valor indica que MySQL necesita hacer un paso extra para encontrar la
forma de ordenar las filas. Este tipo de consultas debe ser optimizada.
Using index: Recupera la información solicitada utilizando únicamente la información del
índice. Esto sucede cuando todas las columnas requeridas forman parte del índice.
Using temporary: Para resolver esta consulta, MySQL creará una tabla temporal. Uno de los
casos típicos en los que devuelve este valor es cuando usamos un ORDER BY sobre un
conjunto de columnas diferentes a las indicadas en la clausula GROUP BY. Este tipo de
consultas debe ser optimizada.

Where used: Se usará una clausula WHERE para determinar que filas serán comparadas con
otra tabla. Si no deseamos regresar todas las filas desde la tabla, y el join es del tipo ALL o
index, es muy probable que hayamos escrito algo mal en la consulta.
Cognitive Cities Management Research Group (CMMA)
EXPLAIN
EJEMPLO
1. Conctarse a MySQL con el nombre de usuario y usar la base de datos donde se localiza
la tabla que se quiere analizar.
2. Ejecutar ahora una consulta EXPLAIN SELECT sobre la tabla.

EXPLAIN SELECT * FROM tabla WHERE condiciones;

Vamos a ejecutar la sentencia EXPLAIN SELECT sobre una tabla de ejemplo que contiene
información acerca de los productos que vende una empresa:

EXPLAIN SELECT title FROM productos WHERE nombre LIKE 'M%‘;

Vamos a ver dos posibles resultados del comando anterior, fijándonos principalmente
en los valores key, possible_keys, y rows:
Cognitive Cities Management Research Group (CMMA)
EXPLAIN
• En este primer posible resultado vemos que tanto possible_keys como key tienen
valor NULL, indicando que la tabla MySQL no tiene ningún índice que le permita acelerar
las consultas. También vemos que, según el valor de rows, se han recorrido 140 filas para
generar los resultados, algo que puede ser excesivo, ya que MySQL debe analizar fila por
fila y comprobar si el campo nombre del producto comienza por la letra M en cada una
de ellas.
id: 1
select_type: SIMPLE
table: productos
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 140
Extra: Using Cognitive
where Cities Management Research Group (CMMA)
EXPLAIN

Si agregamos un índice llamado


indice_nombre_producto en la columna nombre y id: 1
ejecutamos de nuevo la consulta anterior, el select_type: SIMPLE
resultado cambia. Tanto el valor de key como el table: productos
de possible_keys indican que MySQL ha encontrado type: range
un índice que puede utilizar para optimizar la possible_keys:
consulta. Si observas la fila rows, podrás ver que el indice_nombre_producto
número de filas que MySQL ha tenido que recorrer key: indice_nombre_producto
es de tan solo 20, que es un número muy inferior a key_len: 22
las 140 filas anteriores. ref: NULL
Por último, también tenemos el valor Extra, rows: 20
indicando que MySQL usará un índice en esta Extra: Using where; Using index
consulta.
Cognitive Cities Management Research Group (CMMA)
INDEXACIÓN
INDEXANDO TEXTO
• Principal problema, que el índice
ocupa más espacios que el texto a
indexar.
• Una alternativa es buscar una
representación compacta.
• La cantidad de accesos a discos
realizados durante el procesamiento
de una consulta resulta crítica para la
performance del índice
Cognitive Cities Management Research Group (CMMA)
INDEXANDO TEXTO

Base de Datos de Texto


Documentos en
formatos electrónicos

BD de texto completo
BD de texto es un
único texto
Base de Datos T = ti,... ,tn

Utilizan documentos
como la estructura de
BD documentales
almacenamiento y
consulta de datos

Cognitive Cities Management Research Group (CMMA)


INDEXANDO TEXTO

Índice da
• T es grande soporte • Arreglo de sufijos
• Búsquedas frecuentes • Count, cuenta el número de • Trie de sufijos
• Suficiente espacio ocurrencias de un patrón P en • Árbol de sufijos
un texto T.
• Locate, ubica todas las
posiciones del texto T donde
el patrón de búsqueda P
ocurre. Índices
Índice sobre T
populares

Cognitive Cities Management Research Group (CMMA)


INDEXANDO TEXTO

Arreglo de sufijos

Implementación eficiente en espacio de los árboles de sufijos.

Desventaja es el coste del proceso de construcción.

Puede utilizarse para indexar palabras (con o sin stopwords) o


caracteres.

Cognitive Cities Management Research Group (CMMA)


INDEXANDO TEXTO
El array de sufijos ve el texto
como una cadena larga. Cada
posición se considera como un
sufijo de texto. Dos sufijos que
comienzan en posiciones
diferentes serán
lexicográficamente diferentes.
De este modo, cada sufijo se
identifica de forma única por su
posición en el texto.

Un ejemplo de un arreglo de sufijos y de un trie de sufijos


Cognitive Cities Management Research Group (CMMA)
INDEXANDO TEXTO

Un trie es una estructura de La información almacenada en


datos de tipo árbol que permite un trie es un conjunto de claves
la recuperación de información (secuencia de símbolos).

Trie de sufijos

Las claves son almacenadas en


Cada letra de la clave se sitúa en las hojas del árbol y los nodos
un nodo internos son pasarelas para guiar
la búsqueda.
Cognitive Cities Management Research Group (CMMA)
INDEXANDO TEXTO
Se empieza en la raíz del árbol. Si
el símbolo que estamos
buscando es A entonces la
búsqueda continúa en el
subárbol asociado al símbolo A
que cuelga de la raíz. Se sigue de
forma análoga hasta llegar al
nodo hoja. Entonces se compara
la cadena asociada a el nodo
hoja y si coincide con la cadena
de búsqueda entonces la
búsqueda ha terminado en éxito,
si no entonces el elemento no se
Un ejemplo de un arreglo de sufijos y de un trie de sufijos
encuentra en el árbol.
Cognitive Cities Management Research Group (CMMA)
INDEXANDO TEXTO

Árbol de sufijos
Un árbol de sufijos es un Pat-Tree construido sobre el conjunto de todos
los sufijos de T codificados sobre alfabeto binario. Cada nodo interno
mantiene el numero de bit del patrón que corresponde usar en ese
punto para direccionar la búsqueda y las hojas contienen una posición
del texto que representa al sufijo que se inicia en dicha posición.
El Pat-Tree es una variante del Trie que consiste en eliminar todas aquellas
porciones del árbol que han degenerado en una lista. Para poder realizar
esta modificación, cada nodo del árbol almacena un numero, llamado
valor de salto que indica la longitud de la lista que ha sido eliminada.

Cognitive Cities Management Research Group (CMMA)


INDEXANDO TEXTO

En el árbol de sufijos el Pat-Tree se construye sobre la representación binaria de los


sufijos, evitando así mantener el rótulo de cada rama. En el caso del arreglo de sufijos, se
ha indicado junto con cada valor del arreglo el sufijo que ese valor representa. Notar que
si recorremos de izquierda a derecha las hojas de un árbol de sufijos obtenemos el
arreglo de sufijos.
Cognitive Cities Management Research Group (CMMA)
INDEXACIÓN
Sintaxis para Crear Índices de texto completo
• Estos índices FULLTEXT o de texto completo se usan en tablas del tipo MyISAM,
se debe relacionar con columnas de tipo TEXT, CHAR o VARCHAR..

• Optimizan el rendimiento de las consultas con búsquedas en tablas con gran


información de campos de texto.

CREATE FULL TEXT INDEX <nombre índice> ON <table>(columnas);

ALTER TABLE tabla ADD FULL TEXT nombre_indice (columnas);

DROP FULL TEXT INDEX <nombre índice> ON <table>;

Cognitive Cities Management Research Group (CMMA)

También podría gustarte