26 messaggi dal 20 luglio 2005
Devo eseguire una volta al mese una store procedure di aggiornamento (su Sql2005) su una tabella e il problema principale è il suo tempo di esecuzione, visto che la mole di dati è molto elevata.

Riassumendo in breve dopo varie elaborazioni creo una tabella temporanea ##tmp costituita da 2 campi(nome e valore)

e poi eseguo questa istruzione

UPDATE miaTabella
SET valore= B.valore
FROM miaTabella A LEFT JOIN ##tmp B ON A.nome = B.nome

Il problema è che poichè la tabella ##tmp contiene circa 3 milioni di righe mentre la tabella miaTabella circa 30 milioni il tempo di esecuzione dell'ultima istruzione è molto molto molto  lungo

A questo punto mi chiedevo se fosse più conveniete utilizzare una tabella di appoggio(magari indicizzata) anzichè la tabella temporanea per velocizzare i tempi di esecuzione oppure se avete anche qualche altra idea è bene accetta

grazie

stefano
Modificato da legnaste il 31 maggio 2006 10.34 -
1.976 messaggi dal 27 luglio 2005
Contributi
salve Stefano,
legnaste ha scritto:
Devo eseguire una volta al mese una store procedure di aggiornamento (su Sql2005) su una tabella e il problema principale è il suo tempo di esecuzione, visto che la mole di dati è molto elevata.
..
A questo punto mi chiedevo se fosse più conveniete utilizzare una tabella di appoggio(magari indicizzata) anzichè la tabella temporanea per velocizzare i tempi di esecuzione oppure se avete anche qualche altra idea è bene accetta
...


puoi indicizzare anche una tabella temporanea...
SET NOCOUNT ON;
CREATE TABLE ##tabella (
Nome varchar(10) NOT NULL PRIMARY KEY CLUSTERED,
Valore varchar(10) NOT NULL
);
DROP TABLE ##tabella ;

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.