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

¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

Estas en el tema de ¿Se os ocurren formas de optimizar el rendimiento de esta SQL? en el foro de SQL Server en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original DELETE * FROM [ Lineas Facturacion ] WHERE Tipo IN ( SELECT Tipo FROM Temp ) AND Serie IN ...
  #1 (permalink)  
Antiguo 08/09/2011, 06:06
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

Código SQL:
Ver original
  1. DELETE * FROM [Lineas Facturacion]
  2. WHERE Tipo IN (SELECT Tipo FROM Temp)
  3. AND Serie IN (SELECT Serie FROM Temp)
  4. AND Numero IN (SELECT Numero FROM Temp)

Gracias por vuestras respuestas...
Saludos.
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 08/09/2011, 07:25
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: ¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

DELETE FROM [Lineas Facturacion]
WHERE Tipo + '|' + serie + '|' + numero IN (SELECT Tipo + '|' + serie + '|' + numero FROM Temp)

O

DELETE FROM [Lineas Facturacion]
WHERE exists (SELECT * FROM Temp)


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 08/09/2011, 07:39
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Respuesta: ¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

La simpleza de las cosas habla por sí sola.
Gracias por tus ejemplos Libras!
Por cierto, ya que estamos, ¿apuestas más por una que por la otra?
O crees que el rendimiento será, más o menos, el mismo en los dos casos.
Ten en cuenta que quiero eliminar muuuchas filas, y el proceso se me queda colgado (entre otras cosas porqué es Access, y del más antiguo).
Así que, realmente, es importante saber cuál es la opción que ofrece un mejor rendimiento.
Un saludo!
__________________
..:: moNTeZIon ::..
  #4 (permalink)  
Antiguo 08/09/2011, 07:54
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: ¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

Indices??? ya tienes indexada tu tabla??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 08/09/2011, 08:00
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Respuesta: ¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

Hombre... pues índices no. Aunque... ¿piensas que son necesarios en este caso?
Lo digo porqué, precisamente, la clave principal de la tabla Temp está compuesta por los campos (Tipo, Serie, Numero) , y a su vez, la clave principal en la tabla [Lineas Facturación] está compuesta por (Tipo, Serie, Numero, Contador).
Se supone que si forman parte de la Primary Key no es necesario aplicar índices sobre estos campos... ¿O estoy equivocado?
Gracias!

Edito:
La siguiente SELECT me devuelve 178 filas:
Código SQL:
Ver original
  1. SELECT Tipo, Serie, Numero FROM [Cabecera Facturacion]
  2. WHERE Tipo IN (SELECT Tipo FROM TEMP)
  3. AND Serie IN (SELECT Serie FROM Temp)
  4. AND Numero IN (SELECT Numero FROM Temp)

Mientras que la siguiente SELECT me devuelve 1435 filas:
Código SQL:
Ver original
  1. SELECT Tipo, Serie, Numero FROM [Cabecera Facturacion]
  2. WHERE EXISTS (SELECT Tipo, Serie, Numero FROM Temp)

Lo mismo, lo mismo, no parece que sea una cosa que la otra... Suerte que no he lanzado el DELETE.
¿Sabes a qué puede deberse esa diferencuia de resultados?
Ya te adelanto que los resultados buenos son los del primer caso (178 facturas)

De momento estoy ocupando esta... pero me esta tardando mucho ya...
Código SQL:
Ver original
  1. SELECT Tipo + Serie + CStr(Numero) FROM [Cabecera Facturacion]
  2. WHERE Tipo + Serie + CStr(Numero) IN (SELECT Tipo + Serie + CStr(Numero) FROM Temp)

Gracias por tus opiniones.
Saludos.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 08/09/2011 a las 08:25
  #6 (permalink)  
Antiguo 08/09/2011, 08:54
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: ¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

Cita:
Iniciado por moNTeZIon Ver Mensaje
Hombre... pues índices no. Aunque... ¿piensas que son necesarios en este caso?
Lo digo porqué, precisamente, la clave principal de la tabla Temp está compuesta por los campos (Tipo, Serie, Numero) , y a su vez, la clave principal en la tabla [Lineas Facturación] está compuesta por (Tipo, Serie, Numero, Contador).
Se supone que si forman parte de la Primary Key no es necesario aplicar índices sobre estos campos... ¿O estoy equivocado?
Gracias!
Primeramente que un campo sea llave primaria no necesariamente es un indice aunque la mayoria de manejadores de base de datos te los hace un cluster index sin preguntar, los mas conveniente es tener nada mas un cluster index y los demas campos que sean un non cluster index, en este caso tendrias un cluster index por el campo digamos numero, y un non cluster por los campos serie y numero, esto aumentaria el rendimiento de tus querys...

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 08/09/2011, 11:57
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: ¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

Perdon que meta mi "cuchara"; yo voto por la segunda opcion

DELETE FROM [Lineas Facturacion]
WHERE exists (SELECT * FROM Temp)

Independientemente de la revision de los indices, no lo digo yo, lo dice Microsoft en su documento de MEJORES PRACTICAS.
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 08/09/2011, 16:23
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Respuesta: ¿Se os ocurren formas de optimizar el rendimiento de esta SQL?

¿Y como sería en sintaxis SQL para Access?
Y a parte de eso... En la tabla Temp solo hay 3 campos Tipo Serie Numero.
En la otra tabla hay muchos más campos.
En tal caso me pregunto si debería cambiarlo por algo así

DELETE * FROM [Lineas Facturacion]
WHERE Tipo + Serie + CStr(Numero) exists (SELECT Tipo + Serie + CStr(Numero) FROM Temp)
__________________
..:: moNTeZIon ::..

Etiquetas: formas, rendimiento, select
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 19:58.