2010-07-06 6 views
6

Esta consulta tarda aproximadamente un minuto para dar resultados:¿Hay alguna razón para que esta simple consulta SQL sea tan lenta?

SELECT MAX(d.docket_id), MAX(cus.docket_id) FROM docket d, Cashup_Sessions cus 

Sin embargo, ésta:

SELECT MAX(d.docket_id) FROM docket d UNION MAX(cus.docket_id) FROM Cashup_Sessions cus 

da sus resultados al instante. No puedo ver lo que está haciendo el primero que tomaría mucho más tiempo. Quiero decir que ambos simplemente verifican las mismas dos listas de números para el mejor y los devuelven. ¿Qué más podría estar haciendo que no puedo ver?

Estoy usando jet SQL en una base de datos de MS Access a través de Java.

+0

'jet SQL en un MS Access' <- ¡Mis ojos! ¡Las gafas! ¡Ellos no hacen nada! –

+0

Supongo que quiere decir que el jet es una tecnología algo inadecuada. Como puedes ver, soy un principiante autodidacta en la oscuridad. Si pudieras profundizar un poco en este comentario, te lo agradecería, ya que podría ayudarme a comprender la magnitud/cordura de la tarea que estoy emprendiendo. – Jack

Respuesta

13

la primera está haciendo una combinación cruzada entre 2 tablas mientras que la segunda no.
eso es todo lo que hay que hacer.

+0

OK. Entonces una coma implica una unión cruzada. Gracias a todos los que se tomaron el tiempo para señalarlo. Pasará más tiempo con los libros "beggining sql" ahora. – Jack

+0

La coma implica una unión, es una unión cruzada solo porque no hay una cláusula where para unir las tablas. – airmanx86

9

El primero usa producto cartesiano para formar una fuente de datos, lo que significa que cada fila de la primera tabla se empareja con cada fila de la segunda. Después de eso, busca en la fuente para conocer los valores máximos de las columnas.

El segundo no une tablas. Solo encuentra el máximo de la primera mesa y el máximo de la segunda tabla y luego devuelve dos filas.

3

La primera consulta realiza una combinación cruzada entre las tablas antes de obtener los máximos, lo que significa que cada registro en una tabla se une a cada registro en la otra tabla.

Si tiene dos tablas con 1000 elementos cada una, obtendrá un resultado con 1000000 elementos para encontrar los máximos.

Cuestiones relacionadas