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

consultas, substr e inner joins

Estas en el tema de consultas, substr e inner joins en el foro de Oracle en Foros del Web. Hola. Mi problema es que tengo una consulta que tarda casi una hora en hacer "fetch" :O ... va así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver ...
  #1 (permalink)  
Antiguo 19/03/2015, 23:10
Avatar de Ludwingg  
Fecha de Ingreso: diciembre-2002
Ubicación: San Salvador
Mensajes: 951
Antigüedad: 21 años, 4 meses
Puntos: 5
consultas, substr e inner joins

Hola.

Mi problema es que tengo una consulta que tarda casi una hora en hacer "fetch" :O ... va así:

Código SQL:
Ver original
  1. SELECT a.tkt
  2. FROM tabla1 a
  3. INNER JOIN tabla2 b ON b.codigo_uno= substr(a.tkt,0,3) AND b.codigo_dos=substr(a.tkt,4,15)
  4. WHERE a.tkt='1344556789012'

Es necesario que el campo a.tkt sea dividido para poder relacionar la tabla1 con la tabla2, por eso uso la función substr para hacer del campo a.tkt, dos "substrings"..... entonces, específicamente la parte del código que hace lenta a la consulta es:
Código SQL:
Ver original
  1. b.codigo_uno= substr(a.tkt,0,3) AND b.codigo_dos=substr(a.tkt,4,15)

Si por ejemplo hago lo siguiente, la consulta reduce notablemente el tiempo de fetch:
Código SQL:
Ver original
  1. SELECT a.tkt
  2. FROM tabla1 a
  3. INNER JOIN tabla2 b ON b.codigo_uno= '134' AND b.codigo_dos='4556789012'
  4. WHERE a.tkt='1344556789012'

Pero no puedo utilizar datos estáticos para hacer el inner join, ya que son miles y miles de registros a mostrar.

Gracias por cualquier ayuda

Última edición por gnzsoloyo; 20/03/2015 a las 04:50 Razón: Muy mal etiquetado.
  #2 (permalink)  
Antiguo 20/03/2015, 04:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas, substr e inner joins

Mira, con Oracle hay algunas consideraciones respecto de tus consultas:
- Si los campos son NUMBER, te recomiendo no poner los valores como caracteres, porque pueden causar baja performance, o fallos por inconsistencia de tipos. Oracle no suele manejar bien las conversiones implícitas.
- Si los campos son de caracteres, y están indexados, no es buena idea usar funciones sobre las columnas, como el caso de SUBSTR(), a menos que el índice se haya creado usando la función, ya que eso causará que Oracle descarte los índices y realice full tablescan.
- Si los campos son NUMBER, y vas a buscar un rango, te conviene crear el rango de modo que se compare como rango (x BETWEEN y AND z), y no con un SUBSTR.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: dato, joins, substr, tabla
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 20:16.