SQL Server Performance

Ayuda, consulta varchar

Discussion in 'Preguntas sobre SQL Server en Español.' started by micheliux, Aug 22, 2006.

  1. micheliux New Member

    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

  2. micheliux New Member

    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
  3. micheliux New Member

    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


  4. micheliux New Member

    Esto es SQLServer 2000 con sp3a...Antes estas consultas estaban en SQL6.5
  5. Luis Martin Moderator

    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.



  6. micheliux New Member

    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


  7. micheliux New Member

    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
  8. Luis Martin Moderator

    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.



Share This Page