Tecnología

Inicio

Tutorial Distinto MySQL

MySQL es un sistema de gestión de base de datos relacional de código abierto (RDBMS). Debido a su bajo costo, las organizaciones están utilizando cada vez más para grandes bases de datos. Cuanto más grande sea la base de datos, es más probable una consulta devolverá el número de filas duplicadas, por lo que la salida difícil de leer y la consulta lenta. El uso de la palabra clave DISTINCT en las instrucciones SELECT puede eliminar estos duplicados en su salida.

¿Por qué se obtienen resultados duplicados

Por lo general, una consulta no muestra todas las columnas de la tabla o tablas que hace referencia. Un empleador puede, por ejemplo, tener una tabla que registra la ausencia de empleados. Si quiere saber qué empleados tenían al menos una ausencia en el último mes, se podría utilizar una consulta que se ve algo como esto:

employees.first_name SELECT, employees.last_name
De los empleados, las ausencias
DONDE employees.employee_id = absences.employee_id
Y absences.date> = 'JUN-01-09'
IR

Si Bob Smith estuvo ausente durante tres días en junio, los resultados de la consulta se contienen tres filas de Bob Smith. A pesar de que la consulta no muestra la fecha, ya que tres ausencias de Bob estaban en diferentes fechas, esta consulta devuelve cada una de las tres filas.

¿Por qué los resultados duplicados son malas

filas duplicadas no sólo hacen su salida difícil de leer, sino que también ralentizan su consulta y cerdo recursos de base de datos. A menos que su base de datos es muy pequeña, es probable que desarrolle sus secuencias de comandos SQL en una instancia de base de desarrollo que es independiente de la instancia de producción. No es nada raro que las instancias de desarrollo que tienen mucho menos datos en los que la instancia de producción.

Si permite que las filas duplicadas en su salida, que está haciendo buscar su base de datos de todo el camino a través de todas las tablas que ha unido en su consulta. Esto puede hacer una consulta que corría lo suficientemente rápido en su instancia dev lento a paso de tortuga en la producción. Si su base de datos de producción es grande, la consulta puede funcionar durante horas.

Uso y Optimización DISTINCT

La siguiente select regrese una fila para Bob Smith:

SELECT DISTINCT employees.first_name, employees.last_name
De los empleados, las ausencias
DONDE employees.employee_id = absences.employee_id
Y absences.date ENTRE '2009-06-01' Y '2009-07-01'
IR

Sus resultados son más fáciles de leer, pero su servidor de base de datos todavía tiene que trabajar muy duro si su tabla de empleados tiene mucho más filas que la tabla de ausencias. MySQL pasará a través de todos los registros de la tabla de empleados para ver si ese empleado tiene cualquier ausencia.

En su lugar, hacer que el trabajo diferentes para que usted pueda hacer su búsqueda más eficiente:

SELECT DISTINCT employees.first_name, employees.last_name
De los empleados, las ausencias
DONDE absences.employee_id = employees.employee_id
Y absences.date> = 'JUN-01-09'
IR

Esta consulta se llevará un registro en la tabla de ausencias y dejar de buscar la tabla de empleados una vez que encuentra el empleado que va con esa ausencia. Su consulta sólo se puede trabajar con tantos búsquedas, ya que hay ausencias, y buscará a través de mucho menos de la tabla de empleados en cada búsqueda. Se utiliza menos recursos de base de datos y se ejecuta mucho más rápido.