En qué casos INNER JOIN (SELECT & # 8230; no se puede reescribir usando la tabla temporal

StackOverflow https://stackoverflow.com/questions/1443927

  •  22-07-2019
  •  | 
  •  

Pregunta

Estoy usando GridSQL donde obtengo algunos problemas de rendimiento cada vez que surge el patrón SQL INNER JOIN (SELECT. Por lo tanto, estoy considerando reescribir todas estas consultas en dos consultas, una creando una tabla temporal usando la instrucción select exacta y la otra uniendo la consulta con la tabla temporal, por lo que el patrón sería INNER JOIN temp_table (...) en su lugar.

¿En qué casos esto no funcionaría? Como puede sospechar, no espero respuestas a esta pregunta. ;)

¿Fue útil?

Solución

La única vez que una sub-selección no se puede dividir fácilmente en una tabla temporal es cuando hace referencia a campos en la tabla externa.

Para " ... INNER JOIN (SELECT ... " Dudo que tenga ese problema (o si es posible, no recuerdo haberlo intentado nunca), ya que solo debería referirse a los campos de la primera tabla en los criterios de unión.

Otros consejos

¡No creo que una tabla temporal acelere sus consultas! En su lugar, debe optimizar sus consultas. Cosas que puedes hacer:

  • Filtre los registros antes de unirlos internamente con otros conjuntos de registros
  • Definir índices adecuados

-Pavel

  

En qué casos puede INNER JOIN (SELECT   & # 8230; no se reescribirá usando la tabla temporal

si la consulta que está reemplazando con una tabla temporal puede dar como resultado un gran conjunto de resultados, evitaría usar una tabla temporal. La sobrecarga que lo genera negaría cualquier ganancia posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top