Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

problemas con JOIN

Estas en el tema de problemas con JOIN en el foro de Bases de Datos General en Foros del Web. Buena tarde a todos. Tengo un query hasta cierto punto sencillo el cual es @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT a . col1 , ...
  #1 (permalink)  
Antiguo 03/09/2015, 13:11
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 14 años, 7 meses
Puntos: 0
Información problemas con JOIN

Buena tarde a todos.

Tengo un query hasta cierto punto sencillo el cual es

Código SQL:
Ver original
  1. SELECT a.col1,a.col2,a.col4,a.col5,
  2.          b.col1,b.col2,b.col4,b.col5
  3. FROM tabla1 a ,tabla2 b
  4. WHERE a.col1*=b.col1
  5. AND a.col2>= filtro_tipo_fecha AND a.col2<= filtro_tipo_fecha
  6. AND b.col2 IN ('a','b','c','d')

los índices que tiene la tabla1 son
index uno a.col2,a.col3

los índices de la tabla2 son
index uno b.col2
index dos b.col1

El problema es que la tabla1 tiene poco menos de 20 millones de registros
El plan de ejecución me dice que hace un index escan con el índice uno de la tabla1 y ocupa menos de 20% de ejecución
y el otro índice que toma es el index dos de la tabla2 y tarda poco mas de 70%, esta parte se me hace un poco raro ya que y ocupo el índice uno en la búsqueda.

Mis dudas son, como puedo optimizar esta consulta, ya que tarda bastante.

o si me pueden ayudar a entender que tabla busca a que tabla y como poner bien los índices o por que ocupa el índice dos de la tabla2, quiero pensar que es por la forma en que esta haciendo el join pero creo que seria de la tabla1 el problema por no tener índice en esa columna

uso SYBASE 16

y no puedo crear una FK (no es por que no quiera ocuparlo.


Espero me puedan ayudar

Última edición por gnzsoloyo; 03/09/2015 a las 14:12
  #2 (permalink)  
Antiguo 04/09/2015, 11:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: problemas con JOIN

Yo aprendí en la escuela que TODAS las columnas después del WHERE, son o deben ser INDICES.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 07/09/2015, 10:10
 
Fecha de Ingreso: octubre-2007
Ubicación: VEVLN
Mensajes: 223
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: problemas con JOIN

Lo que dice iislas es muy cierto....

Otro truco a aplicar es Forzado de INDICES:

Es posible que podamos encontrarnos TABLE SCAN en las queries que lanzemos, a pesar de existir INDICES que mejorarían el rendimiento. En estos casos la mejor opción para forzar el uso de un INDICE es realizar los siguiente, como muestra el ejemplo:
Código SQL:
Ver original
  1. SELECT * FROM tblTaskProcesses
  2. WHERE nextprocess = 1 AND processid IN (8,32,45)
Esto tarda 3 segundos y al siguiente QUERY tarda menos de un segundo:
Código SQL:
Ver original
  1. SELECT *
  2. FROM tblTaskProcesses (INDEX = IX_ProcessID)
  3. WHERE nextprocess = 1 AND processid IN (8,32,45)

fuente:

http://blogs.msdn.com/b/apinedo/arch...ql-server.aspx

Última edición por gnzsoloyo; 07/09/2015 a las 10:47
  #4 (permalink)  
Antiguo 07/09/2015, 12:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: problemas con JOIN

forzado de indices??? eso no esta bien porque estas mandando la ejecucion por un indice que "tu consideras mejor"

Lo que se recomienda es usar todas las columnas del indice tanto en el where como en el select y en tu ejemplo


Código SQL:
Ver original
  1. SELECT * FROM tblTaskProcesses
  2. WHERE nextprocess = 1 AND processid IN (8,32,45)

seria mucho mejor usar un exists en lugar de un in, eso te da mejor rendimiento ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: indices, join
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:20.