Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    105

    [ASPX.NET] Salvataggio IN SQL più veloce

    Buonasera,
    lato server, tramite un richiamo ciclico di una stored procedure, vado a fare un aggiornamento/inserimento di 3 campi in un database SQL.

    Attualmente la tabella è composta da 250000 righe e ha una chiave primaria con identità.

    Quando faccio il ciclo, passando l'id controllo, la stored procedure controlla se esiste e se si fa un update con i nuovi valori altrimenti fa un update.

    Il problema è che il ciclo fa 320 passate e la procedura è abbastanza lenta.

    Cosa potrei fare per velocizzare l'operazione?

    Devo modificare la struttura della tabella in SQL?
    So che esistono gli indici a livello di tabella che potrebbero velocizzare la query ma non so bene come funzionano


    Grazie mille
    Ubuntu 6.10 + Amuled... Forse

  2. #2
    "abbastanza lento" (concetto soggettivo) corrisponde a quanto tempo (concetto oggettivo) ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    105
    Per lento mi intendo che fare l'INSERT/UPDATE di 320 valori ci impiega 3 minuti.

    Si consideri che ad ogni ciclo controlla 250000 righe l'id corrispondente.
    Se esistente lo aggiorna altrimenti fa una insert.


    Cosa posso fare?


    Grazie
    Ubuntu 6.10 + Amuled... Forse

  4. #4
    Originariamente inviato da jarodevil
    Per lento mi intendo che fare l'INSERT/UPDATE di 320 valori ci impiega 3 minuti.

    Si consideri che ad ogni ciclo controlla 250000 righe l'id corrispondente.
    Se esistente lo aggiorna altrimenti fa una insert.


    Cosa posso fare?


    Grazie
    controlla TUTTE le righe? vuoi dire che fai un ciclo? dai, non ci posso credere, fa' vedere questa SP...

  5. #5
    infatti, è sicuramente un TUO errore di progettazione della logica.
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    105
    Stored Procedure **********************

    ALTER PROCEDURE [dbo].[procInsertUpdateRecipe]
    -- Add the parameters for the stored procedure here
    @ID_VARIANT INT OUTPUT,
    @TYPE_MOD NVARCHAR(1) OUTPUT,
    @RECIPE_NAME NVARCHAR(50),
    @VARIANT_NAME NVARCHAR(50),
    @DATE DATETIME,
    @USERNAME INT,
    @PLANTNUMBER INT,
    @DESCRIPTION NVARCHAR(100),
    @FIN_VELOCITY REAL
    AS
    BEGIN
    SET NOCOUNT ON;

    IF EXISTS(SELECT Id FROM T_RECIPE WHERE RecipeName=@RECIPE_NAME AND VariantName=@VARIANT_NAME)
    BEGIN

    BEGIN TRANSACTION

    UPDATE[T_RECIPE]
    SET DateInsert=@DATE,
    UserName=@USERNAME,
    PlantNumber=@PLANTNUMBER,
    RecipeDescription=@DESCRIPTION,
    FinVelocity=@FIN_VELOCITY
    WHERE ((RecipeName=@RECIPE_NAME) AND (VariantName=@VARIANT_NAME))

    SELECT @ID_VARIANT = Id
    FROM T_RECIPE
    WHERE ((RecipeName=@RECIPE_NAME) AND (VariantName=@VARIANT_NAME))

    SET @TYPE_MOD = 'U'

    IF @@ERROR <> 0
    BEGIN
    -- Rollback the transaction
    ROLLBACK

    -- Raise an error and return
    RAISERROR ('Error in UPDATE table T_RECIPE', 16, 1)
    RETURN
    END


    COMMIT TRANSACTION

    END
    ELSE BEGIN

    BEGIN TRANSACTION

    INSERT INTO[T_RECIPE](RecipeName,VariantName,DateInsert,UserName,PlantN umber,RecipeDescription,FinVelocity)
    VALUES(@RECIPE_NAME,@VARIANT_NAME,@DATE,@USERNAME, @PLANTNUMBER,@DESCRIPTION,@FIN_VELOCITY)

    SET @ID_VARIANT = (SELECT @@IDENTITY);

    SET @TYPE_MOD = 'I'

    IF @@ERROR <> 0
    BEGIN
    -- Rollback the transaction
    ROLLBACK

    -- Raise an error and return
    RAISERROR ('Error in INSERT table T_RECIPE', 16, 1)
    RETURN
    END

    COMMIT TRANSACTION

    END


    END

    TABLE **********************


    CREATE TABLE [dbo].[T_RECIPEVALUE](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [IdRecipe] [int] NOT NULL,
    [IdConf] [int] NOT NULL,
    [ItemValue] [real] NOT NULL,
    CONSTRAINT [PK_T_RECIPEVALUE] PRIMARY KEY CLUSTERED
    (
    [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    Ubuntu 6.10 + Amuled... Forse

  7. #7
    puoi accelerare un po' la SP aggiungendo degli indici sui campi dove fai la prima ricerca (RecipeName e VariantName). fallo dall'interfaccia di SQL, fai prima

    evidenzi la tabella
    tasto destro
    design
    vai sulla colonna
    tasto destro
    indexes/keys
    add
    ... e poi sistemi

    facci sapere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.