Hola a todos quisiera saber si este sp es optimo en la parte de las consultas " select * from deudores (index = i_de_nombre) where de_fecha = @w_fecha_max and de_nombre > @idnombre " Adjunto el sp create procedure sp_consulta_cliente5 ( @idtran varchar(2) = null, @idtipo varchar(1) = null, @idaccion varchar(1) = null, @idcedula varchar(13) = null, @idnombre varchar(40) = null ) as declare @w_fecha_max int /*Fecha Maxima Cargada en la Tabla */ /* Consulta General de Clientes */ if @idtran="CG" begin /* Verifica la Fecha Maxima Cargada en la Tabla */ select @w_fecha_max = max(de_fecha) from deudores (index = i_de_codigoid) set rowcount 20 if @idtipo="0" begin if @idaccion = "R" /* Por Cedula */ select * from deudores (index = i_de_codigoid) where de_fecha = 199908 and de_codigoid >= @idcedula if @idaccion = "N" /* Por Apellido */ select * from deudores (index = i_de_nombre) where de_fecha = @w_fecha_max and de_nombre >= @idnombre end else if @idtipo="1" begin if @idaccion = "R" /* Por Cedula */ select * from deudores (index = i_de_codigoid) where de_fecha = @w_fecha_max and de_codigoid > @idcedula if @idaccion = "N" /* Por Apellido */ select * from deudores (index = i_de_nombre) where de_fecha = @w_fecha_max and de_nombre > @idnombre end end GO
Indices de la tabla: index_name index_description index_keys -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- i_codigo nonclustered located on PRIMARY de_codigoid i_de_codigoid nonclustered located on PRIMARY de_fecha, de_codigoid i_de_nombre nonclustered located on PRIMARY de_fecha, de_nombre i_de_triesgo nonclustered located on PRIMARY de_fecha, de_triesgo i_fecha nonclustered located on PRIMARY de_fecha idx_tesofi nonclustered located on PRIMARY de_codigoid, de_tiporiesgo, de_tipocredito
Algunos de los campos de la tabla: Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ----------------------------------- ----------- ----- ----- ----------------------------------- ----------------------------------- ----------------------------------- -------------------------------------------------------------------------------------------------------------------------------- de_fecha int no 4 10 0 yes (n/a) (n/a) NULL de_tipoid char no 2 yes yes yes SQL_Latin1_General_CP1_CI_AS de_codigoid char no 13 yes yes yes SQL_Latin1_General_CP1_CI_AS de_nombre char no 60 yes yes yes SQL_Latin1_General_CP1_CI_AS Tamaño de la tabla: name rows reserved data index_size unused -------------------------------------------------------------------------------------------------------------------------------- ----------- ------------------ ------------------ ------------------ ------------------ deudores 2526634 1111888 KB 594512 KB 517248 KB 128 KB
Para saber si la sp es óptima puedes analizarlo con el plan de ejecución. Con ello quizás debas incluir algún Ãndice. Luis Martin Moderator SQL-Server-Performance.com All in Love is Fair Stevie Wonder All postings are provided “AS IS†with no warranties for accuracy.
Basicamente a lo que me referia y arreglo la pregunta es que en SQLServer 6.5 antes con esos querys en estas tablas los resultados me salian ordenados ahora en sql2000 ya no salen tan ordenados.... Como puedo arreglar esto en sqlserver 2000, en el sp???? Hay alguna cuenta donde te pueda enviar unos archivos para que lo veas graficamente.???? execute sp_consulta_cliente1 'CG', '0','N','','ALMEIDA' Salida sql 2000 200605ALMEIDA ABAD MAGNO ENRIQUE 200605ALMEIDA ABAD MELIDA ESMILDA 200605ALMEIDA ACOSTA JORGE WILSON 200605ALMEIDA ACOSTA LUIS ENRIQUE 200605ALMEIDA ACOSTA LUIS ERNESTO 200605ALMEIDA ACOSTA LUIS ERNESTO 200605ALMEIDA ACOSTA LUIS ERNESTO 200605ALMEIDA ACOSTA LUIS FERNANDO Salida sql6.5 200606ALMEIDA ABAD MAGNO ENRIQUE 200606ALMEIDA ABAD MELIDA ESMILDA 200606ALMEIDA ABAD MELIDA ESMILDA 200606ALMEIDA ABAD VERONICA AMALIA 200606ALMEIDA ABARCA DIEGO FERNANDO 200606ALMEIDA ABARCA DIEGO FERNANDO 200606ALMEIDA ABECILLA SEGUNDO RAFAEL Cabe recalcar que la información es igual en ambos. /****** Object: Stored Procedure dbo.sp_consulta_cliente1 Script Date: 8/15/2006 3:52:28 PM ******/ create procedure sp_consulta_cliente1 ( @idtran varchar(2) = null, @idtipo varchar(1) = null, @idaccion varchar(1) = null, @idcedula varchar(13) = null, @idnombre varchar(40) = null ) as declare @w_fecha_max int /*Fecha Maxima Cargada en la Tabla */ /* Consulta General de Clientes */ if @idtran="CG" begin /* Verifica la Fecha Maxima Cargada en la Tabla */ select @w_fecha_max = max(de_fecha) from deudores (index = i_de_codigoid) set rowcount 20 if @idtipo="0" begin if @idaccion = "R" /* Por Cedula */ select * from deudores (index = i_de_codigoid) where de_fecha = @w_fecha_max and de_codigoid >= @idcedula if @idaccion = "N" /* Por Apellido */ select * from deudores (index = i_de_nombre) where de_fecha = @w_fecha_max and de_nombre >= @idnombre end else if @idtipo="1" begin if @idaccion = "R" /* Por Cedula */ select * from deudores (index = i_de_codigoid) where de_fecha = @w_fecha_max and de_codigoid > @idcedula if @idaccion = "N" /* Por Apellido */ select * from deudores (index = i_de_nombre) where de_fecha = @w_fecha_max and de_nombre > @idnombre end end
revisando me di cuenta que si modifco el query en el sp y lo pongo a esto select * from deudores --(index = i_de_nombre) where de_fecha = @w_fecha_max and de_nombre >= @idnombre order by de_nombre Ahora en sqlserver 2000, ya se comparta igual que en sqlserver 6.5 Lo que me queda la duda es `por que????? Se comportan diferentes? Y es correcto lo que hice... Desde el punto de vista de optimización es mejor
El motor de base de datos de 2000 es muy superior a 6.5. Inclusive el 7.0 ya se diseño mucho mejor que el 6.5. De allà la razon de eso. No obstante, te suguiero revisar todos los queries y, si no puedes interpretar el plan de ejecución, utiliza el Index Tuning Wizard (No recuerdo la traducción es castellano) para encontrar los mejores Ãndices sin forzar uno como el que tu has escrito. Luis Martin Moderator SQL-Server-Performance.com All in Love is Fair Stevie Wonder All postings are provided “AS IS†with no warranties for accuracy.