Optimizar consultas sql

Uno de los temas más importantes a la hora de desarrollar un sitio web es el tiempo de procesamiento y ejecución. Una página web lenta raramente será de nuevo visitada o guardada en nuestros marcadores. Una forma de acortar el tiempo de carga de una web es tener la base de datos y las sentencias sql optimizadas.

Diseño de las tablas:

- Normalizar la base de datos. Puedes encontrar un artículo en la wikipedia de como hacerlo. Procura normalizar hasta la tercera forna normal. En ocasiones podemos hacer algún truco para que las consultas sean más rápidas pero sin abusar. Por lo general es mucho más rapido y eficiente si están correctamente normalizadas. A los trucos que me refería antes, me refiero por ejemplo al número de comentarios de post. Puede que sea más rápido guardar un campo en la tabla de posts con el total de comentarios de ese post, que contar todos los comentarios de otra tabla con el id del post.

- Los campos requeridos de las tablas tienen que ser los primeros campos. Los campos requeridos de longitud fija (int, enum, etc..) tienen que ir primero que los de longitud variable (varchar, etc..).

- Ajusta el tamaño de los campos de la tabla para no desperdiciar espacio.

- Elimina los campos que no se usen de la tabla ya que aunque no contenga datos, genera retrasos.

- Índices. Los índices son campos por los que se puede buscar a una velocidad superior. Los índices tienen la desventaja que hacen lenta la actualización, carga y borrado de datos, ya que por cada cambio en la tabla también hay que modificar el índice. Además los índices ocupan espacio extra en el disco. No hay que indexar todos los campos de una tabla y hay que seleccionar que campos queremos indexar con cuidado (campos por los que vamos a realizar búsquedas en la tabla). Por defecto las tablas no tienen índices por lo que su inclusión puede doblar la velocidad en algunos casos.

Los campos que se recomienda indexar son:

    - Claves primarias.
    - Claves externas a otras tablas (claves foráneas)
    - Campos por los que se harán búsquedas
    - Campos por los que se va a ordenar.

 

Seleccionar campos:

- Seleccionar solamente los campos que se necesiten.

- Nunca hacer un SELECT * por que el motor tiene que leer primero la estructura de la tabla antes de ejecutar la sentencia.

- Si se utilizan varias tablas en la consulta, especifica siempre a que tabla corresponde cada campo para evitar al gestor localizar el campo en la tabla. Por ejemplo: SELECT comentario.texto FROM comentario, post WHERE post.id=comentario.post_id

 

Filtrar resultados con WHERE:

- Utilizar en el where campos que sean clave en la medida de lo posible. Si no son campos clave, que al menos sean índices.

- Si se utilizan varias tablas en la sentencia, hay que tener cuidado con su orden en la cláusula FROM. Si queremos saber todos los comentarios que se han escrito sobre un post en un día en partícular (día 10) y escribimos: FROM post, comentarios WHERE post.id=comentarios.post_id AND comentarios.dia=10, el gestor recorrerá todos los posts que tengan comentarios y después filtrará los que son del día 10. La consulta correcta sería: FROM comentarios, post WHERE comentarios.dia=10 AND post.id=comentarios.post_id. De esta forma primero filtra los comentarios y despues selecciona los posts, recorriendo menos registros.

 

Se aceptan sugerencias e incluso una segunda parte de este artículo.

Compártelo

También te puede interesar...

Comentarios

    No hay comentarios.

Escribe un comentario

Tienes que estar registrado para poder dejar comentarios.
Accede a tu cuenta o regístrate en NotasWeb.com.
Avatar_1 jonseg
en el Ranking


Artículos más vistos del usuario

Últimos artículos del usuario