2009-02-06 21 views
5

Estoy intentando seleccionar una lista distinta donde se crean duplicados en varios campos. Por ejemplo,En SQL, ¿cómo afecta el uso de DISTINCT al rendimiento?

SELECT tablename.field1Date, 
     tablename.field2Number, 
     tablename.field3Text 
FROM tablename; 

Seleccionaría la duplicación de registros en los campos de fecha, número y texto, respectivamente.

Ahora, cuando selecciono registros distintos para proporcionar lo que estoy buscando, el rendimiento parece disminuir drásticamente.

SELECT DISTINCT tablename.field1Date, 
       tablename.field2Number, 
       tablename.field3Text 
FROM tablename; 

¿Hay alguna razón conocida para esto? Debo admitir que estoy usando MS Access 2003, que puede ser el problema.

Respuesta

10

Sí, básicamente tiene que ordenar los resultados y luego volver a procesarlos para eliminar los duplicados. Este descarte también podría hacerse durante el proceso, pero solo podemos especular sobre cómo funciona exactamente el código en segundo plano. Podría intentar mejorar el rendimiento creando un índice compuesto por los tres (3) campos.

+0

¿Cree que hay una diferencia de rendimiento entre un índice compuesto en los tres campos e índices individuales en cada campo? –

+0

Espero que haya alguna mejora. De lo contrario, el único uso de un índice compuesto sería garantizar la singularidad, en lugar de ayudar con las búsquedas de n-tuplas. – BIBD

1

Sí, la aplicación necesita comparar cada registro con el caché de registros "distintos" a medida que avanza. Puede mejorar el rendimiento utilizando un índice, especialmente en los campos numéricos y de fecha.

+0

La operación que describes es O (n²). Por lo tanto, es más probable que la respuesta de CodeSlave sea correcta, ya que la ordenación solo toma O (n log n) y la eliminación de duplicados de una lista ordenada es O (n). –

4

Esta página contiene consejos para mejorar el rendimiento de su consulta y también información sobre el uso del analizador de rendimiento. Le dirá qué sucede si se necesitan índices.

http://support.microsoft.com/kb/209126

Cuestiones relacionadas