06 julio, 2020

Indexación

¡Hola mis coders! El objetivo de este pequeño post es  aprender a emplear índices en la optimización del rendimiento de una base de datos. Para ello, primero debemos determinar la necesidad de empleo de índices en una base de datos y posteriormente emplear los comandos CREATE y DROP para el uso de índices.

Recordemos que en el tema anterior aprendimos a generar consultas sencillas de unión interna (INNER). Si no lo viste, dale clic al siguiente enlace. (Clic aquí).

¿QUÉ ES UN ÍNDICE?


Un índice es una estructura de datos que permite acceder a diferentes filas de una misma tabla a través de un campo (o campos clave). Un índice permite un acceso mucho más rápido a los datos.

¿CÓMO TRABAJA LOS ÍNDICES?


Cada tabla se divide en páginas de datos, o bien en páginas a las que podemos acceder rápidamente a través de un índice.

Está idea es la que se aplica en el mundo de las bases de datos, la información esta guardada en una tabla (el libro) que tiene muchas hojas de datos (las páginas del libro), con un índice en el que podemos buscar la información que nos interesa.

Si queremos buscar la palabra zapato, ¿qué hacemos?

  1. Leemos todo el diccionario hasta encontrar la palabra, o
  2. Buscamos en el índice en que página está la letra z, y es en esa página es donde buscamos.


Ni que decir que la opción dos (2) es la correcta, y es de este modo como se utiliza un índice en las bases de datos.


CREACIÓN DE ÍNDICES


Un índice adecuadamente situado en una tabla, ayudará a la base de datos a recuperar más rápidamente los datos, sobre todo cuando las tablas son muy grandes. Los índices se asocian a una única tabla. Podrá haber un índice primario (índice por el cual se ordena la tabla de datos) y múltiples índices secundarios.

Para la creación de índices, se utiliza la siguiente sintaxis:



Donde:


índice: Es el nombre del índice a crear
tabla:  Es el nombre de una tabla existente en la que se creará el índice
campo: Es el nombre del campo o lista de campos que constituyen el índice
ASC |DESC: Indica el orden de los valores de los campos ASC indica un orden ascendente (valor predeterminado) y DESC un orden descendente
UNIQUE Indica que el índice no puede contener valores duplicados
DISALLOW NULL: Prohíbe valores nulos en el índice
IGNORE NULL: Excluye del índice los valores nulos incluidos en los campos que lo componen
PRIMARY: Asigna al índice la categoría de clave principal, en cada tabla sólo puede existir un único índice que sea "Clave Principal". Si un índice es clave principal implica que no puede contener valores nulos ni duplicados 

IMPORTANCIA DE LOS ÍNDICES


La selección de índices requiere que el diseñador de la base de datos haga un compromiso: 
  • La existencia de un índice en un atributo agiliza enormemente las consultas en que se especifica un valor de él. 
  • En cambio, todos los índices construidos para un atributo de alguna tabla hacen que inserciones, modificaciones y eliminaciones sean más complejas y Lentas
A la hora de decidirse a crear los índices, se debe estimar cuál será la combinación normal de consultas y otras operaciones sobre la base de datos. Si una tabla se consulta con mucha mayor frecuencia de lo que se modifica, conviene utilizar índices sobre los atributos utilizados como filtro de consulta más a menudo.
Si las modificaciones son la operación predominante, hay que ser más cauto respecto a la creación de índices.

USO DE LOS ÍNDICES


Razones para crear un índice

  • Acelerar el acceso a datos
  • Fuerzan la unicidad de las filas


Razones para no crear un índice

  • Consumen espacio en disco
  • Generan costos de procesamiento

TIPOS DE ÍNDICES


Índices Agrupados

  • Cada tabla sólo puede tener un índice agrupado
  • El orden físico de las filas de la tabla y el orden de las filas en el índice son el mismo
  • La unicidad de los valores de clave se mantiene explícitamente o implícitamente


Índices No Agrupados

  • Los índices no agrupados son los predeterminados de SQL Server
  • Los índices no agrupados existentes se vuelven a generar automáticamente:
  • Se quita un índice agrupado existente
  • Se crea un índice agrupado
  • Se utiliza la opción DROP_EXISTING para cambiar las columnas que definen el índice agrupado

ACTIVIDAD


Usando TRANSACT/SQL, realice las siguientes actividades en la base de datos KYO que creamos en el tema de Creación de Tablas. Identifique, cuáles son las tablas de donde es posible que se realicen la mayor cantidad de consultas, y luego cree los siguientes índices:

1. Cree un índice para acelerar las búsquedas por el apellido paterno del cliente y ante coincidencias por el nombre. 



2. Para una rápida identificación de una comida cree el índice para la columna DES_COMi.


RESUMEN


  • Las sentencias CREATE INDEX y DROP INDEX definen índices, los cuales aceleran las consultas de la base de datos notablemente, pero a cambio ellos añaden recargo a las actualizaciones.
  • UNIQUE, indica que se trata de un índice único, es decir, no admite más de una tupla con el mismo valor en los atributos que forman el índice. Cuando se crea una tabla con clave primaria, automáticamente se crea un índice único.
  • A la hora de decidirse a crear los índices, se debe estimar cuál será la combinación normal de consultas y otras operaciones sobre la base de datos. Si una tabla se consulta con mucha mayor frecuencia de lo que se modifica, conviene utilizar índices sobre los atributos utilizados como filtro de consulta más a menudo.

SOLUCIÓN


SI NO TIENES EL SQL SERVER INSTALADO, HAZ CLIC EN EL SIGUIENTE ENLACE Y EJECUTA EL QUERY.

¡Acabas de ver el tema Indexación del curso de Base de Datos en SQL Server! ¡Fácil verdad! Ir al índice.

Asimismo, si deseas saber más acerca de estos temas, recuerda que puedes comprar la guía completa con todos los temas, ejercicios, evaluaciones resueltas, proyectos, aplicaciones, banco de datos y más; para ello, tienes que ingresar al siguiente enlace. Y si eres seguidor de la comunidad Aprendec puedes acceder a un descuento del -%50.

¡Quiero esto!


No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!