Orden de Columnas y Joins

06/05/2004 - 16:08 por EL Fenrir | Informe spam
Buenos Días:

Me gustaría saber si tiene algo que ver el orden que
colocas en las columnas y la posibilidad de un error o
bajo nivel de rendimiento cuando se hace un join. Es decir
tengo unas tablas de ejemplo

Tabla1 (Col1, Col2, Col3, Col4) -- PK(Col1, Col2, Col3)
Tabla2 (Col1, Col3, Col2, Col6, Col8)

Se puede ver que el orden de las columnas Col2 y Col3 han
cambiado su orden... esto afectara de alguna manera su
manejo...cuando hago un join por ejemplo...

Gracias

Saludos a Todo

Preguntas similare

Leer las respuestas

#1 Adrian D. Garcia
06/05/2004 - 17:18 | Informe spam
Hola,

El orden de las columnas de un indice no afecta a la performance de un query
que hace un join sobre ellas utilizandolas a todas ellas. No importa que el
orden en que se refieren a las columnas en la clausula JOIN siempre y cuando
se utilicen siempre las primeras (o todas) columnas de un indice. El motor
de SQL "normaliza" el query antes de ejecutar y define el plan de ejecucion
mas adecuado en funcion de indices, estadisticas de los mismos, JOINs, WHERE
y ORDER BY que esten definidos.
Puedes verificar esto viendo el plan de ejecucion generado de el query que
planteas, incluso prueba luego de cambiar el orden de los joins y veras que
el mismo no cambia.

Lo que si afecta al rendimiento es el tipo de datos de las columnas de los
indices involucrados. Por lo general hay que tratar de no utilizar en
indices columnas de los tipos VARCHAR y CHAR.
Saludos

Adrian D. Garcia
NDSoft
MCSD
"EL Fenrir" escribió en el mensaje
news:939601c43373$a6f4e760$
Buenos Días:

Me gustaría saber si tiene algo que ver el orden que
colocas en las columnas y la posibilidad de un error o
bajo nivel de rendimiento cuando se hace un join. Es decir
tengo unas tablas de ejemplo

Tabla1 (Col1, Col2, Col3, Col4) -- PK(Col1, Col2, Col3)
Tabla2 (Col1, Col3, Col2, Col6, Col8)

Se puede ver que el orden de las columnas Col2 y Col3 han
cambiado su orden... esto afectara de alguna manera su
manejo...cuando hago un join por ejemplo...

Gracias

Saludos a Todo
Respuesta Responder a este mensaje
#2 Maxi
06/05/2004 - 17:31 | Informe spam
Hola, en lo absoluto!! el orden de las columnas no importa para nada, solo
es una cuestion de orden pero nada mas

El bajo rendimiento se debe a otros factores:

1) Indices
2) Bloqueos

etc

Bye


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



"EL Fenrir" escribió en el mensaje
news:939601c43373$a6f4e760$
Buenos Días:

Me gustaría saber si tiene algo que ver el orden que
colocas en las columnas y la posibilidad de un error o
bajo nivel de rendimiento cuando se hace un join. Es decir
tengo unas tablas de ejemplo

Tabla1 (Col1, Col2, Col3, Col4) -- PK(Col1, Col2, Col3)
Tabla2 (Col1, Col3, Col2, Col6, Col8)

Se puede ver que el orden de las columnas Col2 y Col3 han
cambiado su orden... esto afectara de alguna manera su
manejo...cuando hago un join por ejemplo...

Gracias

Saludos a Todo



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 03/05/2004
Respuesta Responder a este mensaje
#3 El Fenrir
06/05/2004 - 20:02 | Informe spam
Hola Adrian:

A que te refieres cuando dices que por lo general hay que
tratar de no utilizar en indices columnas de los tipos
VARCHAR y CHAR.

Salu2



Hola,

El orden de las columnas de un indice no afecta a la


performance de un query
que hace un join sobre ellas utilizandolas a todas ellas.


No importa que el
orden en que se refieren a las columnas en la clausula


JOIN siempre y cuando
se utilicen siempre las primeras (o todas) columnas de un


indice. El motor
de SQL "normaliza" el query antes de ejecutar y define el


plan de ejecucion
mas adecuado en funcion de indices, estadisticas de los


mismos, JOINs, WHERE
y ORDER BY que esten definidos.
Puedes verificar esto viendo el plan de ejecucion


generado de el query que
planteas, incluso prueba luego de cambiar el orden de los


joins y veras que
el mismo no cambia.

Lo que si afecta al rendimiento es el tipo de datos de


las columnas de los
indices involucrados. Por lo general hay que tratar de no


utilizar en
indices columnas de los tipos VARCHAR y CHAR.
Saludos

Adrian D. Garcia
NDSoft
MCSD
"EL Fenrir"


escribió en el mensaje
news:939601c43373$a6f4e760$
Buenos Días:

Me gustaría saber si tiene algo que ver el orden que
colocas en las columnas y la posibilidad de un error o
bajo nivel de rendimiento cuando se hace un join. Es decir
tengo unas tablas de ejemplo

Tabla1 (Col1, Col2, Col3, Col4) -- PK(Col1, Col2, Col3)
Tabla2 (Col1, Col3, Col2, Col6, Col8)

Se puede ver que el orden de las columnas Col2 y Col3 han
cambiado su orden... esto afectara de alguna manera su
manejo...cuando hago un join por ejemplo...

Gracias

Saludos a Todo


.

Respuesta Responder a este mensaje
#4 Javier Loria
07/05/2004 - 08:31 | Informe spam
Hola:
El ORDEN de las columnas SI afecta el desempeno del indice y de la
consulta.Aun cuando TODAS las columnas esten incluidas en el JOIN.
De primera entrada el servidor de SQL se vera a obligado a ordenar los
datos de la Tabla2 para adecuarse al Orden de la Tabla1 o viceversa para
luego hacer el JOIN. Si la tabla es pequena no debe ser muy importante, pero
si las columnas Col3 y Col2 tienen muchos valores diferentes se vera
obligado a ordenar en RAM e incluso es posible que se vea obligado a ordenar
los datos en TempDB.
Como mi opinion es diferente a la de Adrian y Max me veo obligado a
demostrarlo. :(
Manana escribo el codigo.
Saludos,

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.

EL Fenrir escribio:
Buenos Días:

Me gustaría saber si tiene algo que ver el orden que
colocas en las columnas y la posibilidad de un error o
bajo nivel de rendimiento cuando se hace un join. Es decir
tengo unas tablas de ejemplo

Tabla1 (Col1, Col2, Col3, Col4) -- PK(Col1, Col2, Col3)
Tabla2 (Col1, Col3, Col2, Col6, Col8)

Se puede ver que el orden de las columnas Col2 y Col3 han
cambiado su orden... esto afectara de alguna manera su
manejo...cuando hago un join por ejemplo...

Gracias

Saludos a Todo
Respuesta Responder a este mensaje
#5 Klunin
07/05/2004 - 17:22 | Informe spam
me interesa lo dicho por Javier, pensaba lo mismo que Adrian y Maxi, aunque
creo que estas pensado en el orden de las columnas y de los indices
cambiados, porque si los indices tienen el mismo orden no veo el problema si
cambien de sentido las columnas. bueno esperaremos lo dicho por Javier.

SLDS.

"Javier Loria" escribió en el mensaje
news:#Snlkz$
Hola:
El ORDEN de las columnas SI afecta el desempeno del indice y de la
consulta.Aun cuando TODAS las columnas esten incluidas en el JOIN.
De primera entrada el servidor de SQL se vera a obligado a ordenar los
datos de la Tabla2 para adecuarse al Orden de la Tabla1 o viceversa para
luego hacer el JOIN. Si la tabla es pequena no debe ser muy importante,


pero
si las columnas Col3 y Col2 tienen muchos valores diferentes se vera
obligado a ordenar en RAM e incluso es posible que se vea obligado a


ordenar
los datos en TempDB.
Como mi opinion es diferente a la de Adrian y Max me veo obligado a
demostrarlo. :(
Manana escribo el codigo.
Saludos,

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.

EL Fenrir escribio:
> Buenos Días:
>
> Me gustaría saber si tiene algo que ver el orden que
> colocas en las columnas y la posibilidad de un error o
> bajo nivel de rendimiento cuando se hace un join. Es decir
> tengo unas tablas de ejemplo
>
> Tabla1 (Col1, Col2, Col3, Col4) -- PK(Col1, Col2, Col3)
> Tabla2 (Col1, Col3, Col2, Col6, Col8)
>
> Se puede ver que el orden de las columnas Col2 y Col3 han
> cambiado su orden... esto afectara de alguna manera su
> manejo...cuando hago un join por ejemplo...
>
> Gracias
>
> Saludos a Todo


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