Optimizar Query

07/07/2004 - 20:50 por Jorge Eldis | Informe spam
Buenas a todos,

Tengo el sisguiente problema:

Tengo un SELECT el cual me devuelve las llamadas de telefonos de una central
telefonica pero en ese SELECT pongo el nobre del pais que se llamo, asi que
hice una funcion para pasarle el numero y me devuelve el pais.

Esto funciona pero es super lento ya que la lista de paises es grande.

Como pudiera optimizar esto?

Saludos Jorge Eldis

Preguntas similare

Leer las respuestas

#6 ulises
08/07/2004 - 05:03 | Informe spam
Prueba con :

SELECT NumeroOrigen, NumeroDestino, Nombre
FROM TBL_LLAMADAS LEFT JOIN TBL_PAISES
ON NumeroDestino LIKE CodigoPais + '%'

esto asume que no existen claves parecidas en tu tabla TBL_PAISES
(p.e. 51 y 514 ) ya que si eso sucede se producirían duplicidades.

Saludos,
Ulises

On Wed, 7 Jul 2004 20:13:22 -0500, "Jorge Eldis"
wrote:

Gracias a todos.

Max el probelma es que si hago un JOIN no me mustra nada ya que los codigos
de los paises varian al igual que los numeros.

Ejemplo

Tabla de Llamadas
TBL_LLAMADAS
NumeroOrigen
NuemroDestino

Tabla de Paises
TBL_PAISES
CodigoPais
Nombre

|-|
| TBL_LLAMADAS |
|-|
| 2225847 | 13052332115 |
| 2358547 | 512445526 |
| 3154578 | 5075167833 |
|-|


||
| TBL_PAISES |
||
| 1305 | Florida |
| 51 | Peru |
| 507 | Panama |
||

Esta seria la estructura y lo que necesito que salga es algo asi

Resultado del Query

2225847 | 13052332115 Florida
2358547 | 512445526 Peru
3154578 | 5075167833 Panama


Bueno yo sigo investigando cualquier orientacion se los agradezco mucho.

Saludos Jorge Eldis

"Maxi" wrote in message
news:
Hola, una funcion? hmmm ahi tienes el problema!! porque no usas la
combinacion JOIN?

Select tablapaises.pais_nombre,tabla_llamadas.* from
tabla_llamadas INNER JOIN tabla_paises on
tabla_llamadas.pais_id = tabla_paises.id




Las funciones se aplican registro a registro y haran todo lento, muy
lentoooo!!!




Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jorge Eldis" escribió en el mensaje
news:
> Buenas a todos,
>
> Tengo el sisguiente problema:
>
> Tengo un SELECT el cual me devuelve las llamadas de telefonos de una
central
> telefonica pero en ese SELECT pongo el nobre del pais que se llamo, asi
que
> hice una funcion para pasarle el numero y me devuelve el pais.
>
> Esto funciona pero es super lento ya que la lista de paises es grande.
>
> Como pudiera optimizar esto?
>
> Saludos Jorge Eldis
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.714 / Virus Database: 470 - Release Date: 02/07/2004





Respuesta Responder a este mensaje
#7 Jorge Eldis
08/07/2004 - 15:24 | Informe spam
Buenas a todos y muchas gracias por la cooperacion.

Ulises ese es otro problema que existen claves parecidas (51 y 514) y tengo
que aparear los numeros en forma descendente para que funcione ej.

si tengo un numero 514-7654, a ese le corresponde el codigo 514, si el 514
no existiera entonces le corresponderia el 51.

Muchas gracias nuevamente por su tiempo ya llevo semanas en esto tratando de
optimizar por eso hice una funcion que fue lo mas practico y funcional que
vi.

Sigo investigando a ver que resuelvo.

Saludos Jorge Eldis

"ulises" wrote in message
news:
Prueba con :

SELECT NumeroOrigen, NumeroDestino, Nombre
FROM TBL_LLAMADAS LEFT JOIN TBL_PAISES
ON NumeroDestino LIKE CodigoPais + '%'

esto asume que no existen claves parecidas en tu tabla TBL_PAISES
(p.e. 51 y 514 ) ya que si eso sucede se producirían duplicidades.

Saludos,
Ulises

On Wed, 7 Jul 2004 20:13:22 -0500, "Jorge Eldis"
wrote:

>Gracias a todos.
>
>Max el probelma es que si hago un JOIN no me mustra nada ya que los


codigos
>de los paises varian al igual que los numeros.
>
>Ejemplo
>
>Tabla de Llamadas
>TBL_LLAMADAS
>NumeroOrigen
>NuemroDestino
>
>Tabla de Paises
>TBL_PAISES
>CodigoPais
>Nombre
>
>|-|
>| TBL_LLAMADAS |
>|-|
>| 2225847 | 13052332115 |
>| 2358547 | 512445526 |
>| 3154578 | 5075167833 |
>|-|
>
>
>||
>| TBL_PAISES |
>||
>| 1305 | Florida |
>| 51 | Peru |
>| 507 | Panama |
>||
>
>Esta seria la estructura y lo que necesito que salga es algo asi
>
>Resultado del Query
>
>2225847 | 13052332115 Florida
>2358547 | 512445526 Peru
>3154578 | 5075167833 Panama
>
>
>Bueno yo sigo investigando cualquier orientacion se los agradezco mucho.
>
>Saludos Jorge Eldis
>
>"Maxi" wrote in message
>news:
>> Hola, una funcion? hmmm ahi tienes el problema!! porque no usas la
>> combinacion JOIN?
>>
>> Select tablapaises.pais_nombre,tabla_llamadas.* from
>> tabla_llamadas INNER JOIN tabla_paises on
>> tabla_llamadas.pais_id = tabla_paises.id
>>
>>
>>
>>
>> Las funciones se aplican registro a registro y haran todo lento, muy
>> lentoooo!!!
>>
>>
>>
>>
>> Salu2
>> Maxi
>> Buenos Aires - Argentina
>> Desarrollador Microsoft 3 Estrellas .NET
>> Nunca consideres el estudio como una obligación sino como
>> una oportunidad para penetrar en el bello y maravillosos
>> mundo del saber.
>> - Albert Einstein
>>
>>
>>
>> "Jorge Eldis" escribió en el mensaje
>> news:
>> > Buenas a todos,
>> >
>> > Tengo el sisguiente problema:
>> >
>> > Tengo un SELECT el cual me devuelve las llamadas de telefonos de una
>> central
>> > telefonica pero en ese SELECT pongo el nobre del pais que se llamo,


asi
>> que
>> > hice una funcion para pasarle el numero y me devuelve el pais.
>> >
>> > Esto funciona pero es super lento ya que la lista de paises es


grande.
>> >
>> > Como pudiera optimizar esto?
>> >
>> > Saludos Jorge Eldis
>> >
>> >
>>
>>
>>
>> Outgoing mail is certified Virus Free.
>> Checked by AVG anti-virus system (http://www.grisoft.com).
>> Version: 6.0.714 / Virus Database: 470 - Release Date: 02/07/2004
>>
>>
>

Respuesta Responder a este mensaje
#8 Javier Loria
08/07/2004 - 17:21 | Informe spam
Hola:
Prueba con esto.
El siguiente SELECT debe darte el codigo de pais mas largo:
==SELECT Tbl_Llamadas.NumeroOrigen
, Tbl_Llamadas.NumeroDestino
, MAX(Tbl_Paises.CodigoPais) AS CodigoPaisDestino
FROM Tbl_Llamadas
JOIN Tbl_Paises
ON Tbl_Llamadas.NumeroDestino LIKE Tbl_Paises.CodigoPais+'%'
== Si eso es correcto, entonces luego puedes hacer un JOIN entre esta
consulta y los nombres de Paises.
==SELECT Ll.NumeroOrigen
, Ll.NumeroDestino
, Ll.CodigoPaisDestino
, Tbl_Paises.Nombre
FROM (SELECT Tbl_Llamadas.NumeroOrigen
, Tbl_Llamadas.NumeroDestino
, MAX(Tbl_Paises.CodigoPais) AS CodigoPaisDestino
FROM Tbl_Llamadas
JOIN Tbl_Paises
ON Tbl_Llamadas.NumeroDestino LIKE Tbl_Paises.CodigoPais+'%') AS
Ll
JOIN Tbl_Paises
ON Tbl_Paises.CodigoPais=Ll.CodigoPaisDestino
== No se que tal sera el desempeno, pero en principio si la Tabla de Paises
no tiene demasiadas filas debe ser rapido.
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Jorge Eldis escribio:
Buenas a todos y muchas gracias por la cooperacion.

Ulises ese es otro problema que existen claves parecidas (51 y 514) y
tengo que aparear los numeros en forma descendente para que funcione
ej.

si tengo un numero 514-7654, a ese le corresponde el codigo 514, si
el 514 no existiera entonces le corresponderia el 51.

Muchas gracias nuevamente por su tiempo ya llevo semanas en esto
tratando de optimizar por eso hice una funcion que fue lo mas
practico y funcional que vi.

Sigo investigando a ver que resuelvo.

Saludos Jorge Eldis

"ulises" wrote in message
news:
Prueba con :

SELECT NumeroOrigen, NumeroDestino, Nombre
FROM TBL_LLAMADAS LEFT JOIN TBL_PAISES
ON NumeroDestino LIKE CodigoPais + '%'

esto asume que no existen claves parecidas en tu tabla TBL_PAISES
(p.e. 51 y 514 ) ya que si eso sucede se producirían duplicidades.

Saludos,
Ulises

On Wed, 7 Jul 2004 20:13:22 -0500, "Jorge Eldis"
wrote:

Gracias a todos.

Max el probelma es que si hago un JOIN no me mustra nada ya que los
codigos de los paises varian al igual que los numeros.

Ejemplo

Tabla de Llamadas
TBL_LLAMADAS
NumeroOrigen
NuemroDestino

Tabla de Paises
TBL_PAISES
CodigoPais
Nombre

-|
TBL_LLAMADAS |
-|
2225847 | 13052332115 |
2358547 | 512445526 |
3154578 | 5075167833 |
-|




|
TBL_PAISES |
|
1305 | Florida |
51 | Peru |
507 | Panama |
|



Esta seria la estructura y lo que necesito que salga es algo asi

Resultado del Query

2225847 | 13052332115 Florida
2358547 | 512445526 Peru
3154578 | 5075167833 Panama


Bueno yo sigo investigando cualquier orientacion se los agradezco
mucho.

Saludos Jorge Eldis

"Maxi" wrote in message
news:
Hola, una funcion? hmmm ahi tienes el problema!! porque no usas la
combinacion JOIN?

Select tablapaises.pais_nombre,tabla_llamadas.* from
tabla_llamadas INNER JOIN tabla_paises on
tabla_llamadas.pais_id = tabla_paises.id




Las funciones se aplican registro a registro y haran todo lento,
muy lentoooo!!!




Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jorge Eldis" escribió en el mensaje
news:
Buenas a todos,

Tengo el sisguiente problema:

Tengo un SELECT el cual me devuelve las llamadas de telefonos de
una central telefonica pero en ese SELECT pongo el nobre del pais
que se llamo, asi que hice una funcion para pasarle el numero y
me devuelve el pais.

Esto funciona pero es super lento ya que la lista de paises es
grande.

Como pudiera optimizar esto?

Saludos Jorge Eldis







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.714 / Virus Database: 470 - Release Date: 02/07/2004
Respuesta Responder a este mensaje
#9 Jorge Eldis
08/07/2004 - 18:45 | Informe spam
Gracis voy a probar a ver como funciona.

Saludos Jorge Eldis

"Javier Loria" wrote in message
news:
Hola:
Prueba con esto.
El siguiente SELECT debe darte el codigo de pais mas largo:
==> SELECT Tbl_Llamadas.NumeroOrigen
, Tbl_Llamadas.NumeroDestino
, MAX(Tbl_Paises.CodigoPais) AS CodigoPaisDestino
FROM Tbl_Llamadas
JOIN Tbl_Paises
ON Tbl_Llamadas.NumeroDestino LIKE Tbl_Paises.CodigoPais+'%'
==> Si eso es correcto, entonces luego puedes hacer un JOIN entre esta
consulta y los nombres de Paises.
==> SELECT Ll.NumeroOrigen
, Ll.NumeroDestino
, Ll.CodigoPaisDestino
, Tbl_Paises.Nombre
FROM (SELECT Tbl_Llamadas.NumeroOrigen
, Tbl_Llamadas.NumeroDestino
, MAX(Tbl_Paises.CodigoPais) AS CodigoPaisDestino
FROM Tbl_Llamadas
JOIN Tbl_Paises
ON Tbl_Llamadas.NumeroDestino LIKE Tbl_Paises.CodigoPais+'%')


AS
Ll
JOIN Tbl_Paises
ON Tbl_Paises.CodigoPais=Ll.CodigoPaisDestino
==> No se que tal sera el desempeno, pero en principio si la Tabla de


Paises
no tiene demasiadas filas debe ser rapido.
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Jorge Eldis escribio:
> Buenas a todos y muchas gracias por la cooperacion.
>
> Ulises ese es otro problema que existen claves parecidas (51 y 514) y
> tengo que aparear los numeros en forma descendente para que funcione
> ej.
>
> si tengo un numero 514-7654, a ese le corresponde el codigo 514, si
> el 514 no existiera entonces le corresponderia el 51.
>
> Muchas gracias nuevamente por su tiempo ya llevo semanas en esto
> tratando de optimizar por eso hice una funcion que fue lo mas
> practico y funcional que vi.
>
> Sigo investigando a ver que resuelvo.
>
> Saludos Jorge Eldis
>
> "ulises" wrote in message
> news:
>> Prueba con :
>>
>> SELECT NumeroOrigen, NumeroDestino, Nombre
>> FROM TBL_LLAMADAS LEFT JOIN TBL_PAISES
>> ON NumeroDestino LIKE CodigoPais + '%'
>>
>> esto asume que no existen claves parecidas en tu tabla TBL_PAISES
>> (p.e. 51 y 514 ) ya que si eso sucede se producirían duplicidades.
>>
>> Saludos,
>> Ulises
>>
>> On Wed, 7 Jul 2004 20:13:22 -0500, "Jorge Eldis"
>> wrote:
>>
>>> Gracias a todos.
>>>
>>> Max el probelma es que si hago un JOIN no me mustra nada ya que los
>>> codigos de los paises varian al igual que los numeros.
>>>
>>> Ejemplo
>>>
>>> Tabla de Llamadas
>>> TBL_LLAMADAS
>>> NumeroOrigen
>>> NuemroDestino
>>>
>>> Tabla de Paises
>>> TBL_PAISES
>>> CodigoPais
>>> Nombre
>>>
>>>> -|
>>>> TBL_LLAMADAS |
>>>> -|
>>>> 2225847 | 13052332115 |
>>>> 2358547 | 512445526 |
>>>> 3154578 | 5075167833 |
>>>> -|
>>>
>>>
>>>> |
>>>> TBL_PAISES |
>>>> |
>>>> 1305 | Florida |
>>>> 51 | Peru |
>>>> 507 | Panama |
>>>> |
>>>
>>> Esta seria la estructura y lo que necesito que salga es algo asi
>>>
>>> Resultado del Query
>>>
>>> 2225847 | 13052332115 Florida
>>> 2358547 | 512445526 Peru
>>> 3154578 | 5075167833 Panama
>>>
>>>
>>> Bueno yo sigo investigando cualquier orientacion se los agradezco
>>> mucho.
>>>
>>> Saludos Jorge Eldis
>>>
>>> "Maxi" wrote in message
>>> news:
>>>> Hola, una funcion? hmmm ahi tienes el problema!! porque no usas la
>>>> combinacion JOIN?
>>>>
>>>> Select tablapaises.pais_nombre,tabla_llamadas.* from
>>>> tabla_llamadas INNER JOIN tabla_paises on
>>>> tabla_llamadas.pais_id = tabla_paises.id
>>>>
>>>>
>>>>
>>>>
>>>> Las funciones se aplican registro a registro y haran todo lento,
>>>> muy lentoooo!!!
>>>>
>>>>
>>>>
>>>>
>>>> Salu2
>>>> Maxi
>>>> Buenos Aires - Argentina
>>>> Desarrollador Microsoft 3 Estrellas .NET
>>>> Nunca consideres el estudio como una obligación sino como
>>>> una oportunidad para penetrar en el bello y maravillosos
>>>> mundo del saber.
>>>> - Albert Einstein
>>>>
>>>>
>>>>
>>>> "Jorge Eldis" escribió en el mensaje
>>>> news:
>>>>> Buenas a todos,
>>>>>
>>>>> Tengo el sisguiente problema:
>>>>>
>>>>> Tengo un SELECT el cual me devuelve las llamadas de telefonos de
>>>>> una central telefonica pero en ese SELECT pongo el nobre del pais
>>>>> que se llamo, asi que hice una funcion para pasarle el numero y
>>>>> me devuelve el pais.
>>>>>
>>>>> Esto funciona pero es super lento ya que la lista de paises es
>>>>> grande.
>>>>>
>>>>> Como pudiera optimizar esto?
>>>>>
>>>>> Saludos Jorge Eldis
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> Outgoing mail is certified Virus Free.
>>>> Checked by AVG anti-virus system (http://www.grisoft.com).
>>>> Version: 6.0.714 / Virus Database: 470 - Release Date: 02/07/2004


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida