Ayuda, consulta varchar | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

Ayuda, consulta varchar

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

Esto es SQLServer 2000 con sp3a…Antes estas consultas estaban en SQL6.5
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.
]]>