Optimizar prestaciones I

Formas de indexar los campos y organizar los enlaces entre tablas para mejorar el rendimiento de las consultas.
Las bases de datos (BD) cuanto más extensas requieren una mayor atención a la hora de organizar sus contenidos. Cuando se trabaja con tablas de miles o decenas de miles de registros la búsqueda de un determinado dato puede resultar un proceso largo que ralentiza enormemente la creación de nuestra página.

Es por ello importante tener en cuenta una serie de aspectos indispensables para el mejor funcionanmiento de la base.

Gestión y elección de los índices

Los índices son campos elegidos arbitrariamente por el constructor de la BD que permiten la búsqueda a partir de dicho campo a una velocidad notablemente superior. Sin embargo, esta ventaja se ve contrarrestada por el hecho de ocupar mucha más memoria (el doble más o menos) y de requerir para su inserción y actualización un tiempo de proceso superior.

Evidentemente, no podemos indexar todos los campos de una tabla extensa ya que doblamos el tamaño de la BD. Igualmente, tampoco sirve de mucho el indexar todos los campos en una tabla pequeña ya que las selecciones pueden efectuarse rápidamente de todos modos.

Un caso en el que los índices pueden resultar muy útiles es cuando realizamos peticiones simultáneas sobre varias tablas. En este caso, el proceso de selección puede acelerarse sensiblemente si indexamos los campos que sirven de nexo entre las dos tablas. En el ejemplo de nuestra librería virtual estos campos serían id_cliente e id_articulo.

Los índices pueden resultar contraproducentes si los introducimos sobre campos triviales a partir de los cuales no se realiza ningún tipo de petición ya que, además del problema de memoria ya mencionado, estamos ralentizando otras tareas de la base de datos como son la edición, inserción y borrado. Es por ello que vale la pena pensarselo dos veces antes de indexar un campo que no sirve de criterio para búsquedas de los internautas y que es usado con muy poca frecuencia por razones de mantenimiento.

Gestión de los nexos entre tablas

El enlace entre tablas es uno de los puntos más peliagudos y que puede llevar a la absoluta ralentización de la base de datos a causa "pequeños" detalles que resultan ser fatales.

Imaginemos que trabajamos con una pequeña BD constituida por dos tablas de 1000 registros cada una. Imaginemos ahora una selección simultánea en la que imponemos la condición de que el valor un campo de la primera sea igual a de una segunda, algo que se realiza con mucha frecuencia. En este tipo de casos, la BD leerá y comparará cada valor de campo de una con cada valor de campo de la otra. Esto representaría un millón de lecturas. Este hecho podría agravarse si consultamos una tercera tabla al mismo tiempo y podría llegar a ser catastrófico si tenemos en cuenta que la BD esta siendo consultada por varios internautas al mismo tiempo.

Para evitar situaciones de colapso, es necesario indexar cada uno de los campos que sirven de enlace entre esas tablas. En el ejemplo de nuestra librería virtual, ya lo hemos dicho, estos campos serían id_cliente e id_articulo. Además, resulta también de vital importancia el definir esos campos de una forma estrictamente idéntica en cada una de las tablas, es decir, el campo ha de ser de la misma naturaleza y características. No vale definirlo como real en una tabla y entero en otra o cambiar la longitud máxima para los alfanuméricos o que en una tabla sea de longitud constante y en otra variable...

El gestionar inteligentemente estos aspectos puede solucionarnos muchos quebraderos de cabeza y permitir a los internautas navegar más agradablemente por nuestro sitio.

Autor

Rubén Alvarez

Rubén es doctor en química y programador aficionado con experiencia en PHP.

Compartir

Comentarios

Hernán

29/10/2010
Duda
Cuando dice en el ejemplo que se ralizarían 1 millon de lecturas a las tablas, no serían solamente 2000??? O sea, 1 lectura para cada registro de las tablas es decir 1000 x 2. Por lo menos es lo que entendí yo :S

Pablo Daniel Almada

11/10/2013
Nexos entre tablas
Hola

Hernán cuando dice que la BD realizará un millón de lecturas se refiere que tomara un campo del primer registro de la primer tabla y lo compara con el primer campo del primer registrode la segunda tabla y con el primer campo del segundo registro de la segunda tabla y asi hasta llegar a mil registros de la segunda tabla , esto equivale a 1*1000. Luego toma el primer campo del segundo registro de la primer tabla y compara con todos los primeros campos de los 1000 registros de la segunda tabla , o sea otros 1* 1000 y asi sucesivamente hasta llegar al ultimo registro de la primera tabla el registro 1000 y comparar su primer campo con los primeros campos de los 1000 registros de la segunda tabla.. En total el numero de lecturas es 1000*1000 o sea 1000000 de lecturas tal como dice el artículo.