Query molto lenta...migliorabile?

di Anonimizzato26118 il
9 risposte
Buongiorno,

vorrei aggiornare il campo categoria di due tabelle in due DB separati.

ho provato questo codice, FUNZIONA MA CI METTE 13 min (30000 record).
MERGE INTO [DB1].[schema].[rubrica] AS target 
	USING [DB2].[schema].[rubrica] AS source
		
		ON (target.NOME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE source.NOME and 
			( source.CATEGORIA = '1' or 
			source.CATEGORIA = '2' or 
			source.CATEGORIA = '3' ) and
			target.CATEGORIA COLLATE SQL_Latin1_General_CP1_CI_AS NOT LIKE source.CATEGORIA)
		WHEN MATCHED THEN
			UPDATE SET target.CATEGORIA = source.CATEGORIA;
volevo chiedervi: ci mette cosi tanto perchè il codice è scritto male oppure perchè sono tanti record?

controllando il monitor risorse di sql sembra che si "gratti la pancia" quindi non è un problema di risorse.

Grazie ragazzi.

9 Risposte

  • Salve,
    almeno la colonna [NOME] nelle 2 tabelle e' indicizzata?
    salutoni
    --
    Andrea
  • Faccio una ricostruzione indici e poi riprovo.
  • Compattato, ricostruito indici.

    la velocità non è cambiata di un centesimo.

    se il modo in cui faccio questa operazione è corretto sarà per il numero elevato di record che confronto...
  • Prova a:
    - sostituire "AS target" con "WITH (HOLDLOCK) AS Target"
    - sostituire il like con uguale e not like con diverso
    - source.CATEGORIA = '1' or source.CATEGORIA = '2' or source.CATEGORIA = '3' con "source.CATEGORIA in ('1','2','3') "
    quanto meno diventa più leggibile

    La categoria non è un numero?
  • Toki modificando questi punti:

    - sostituire il like con uguale e not like con diverso
    - source.CATEGORIA = '1' or source.CATEGORIA = '2' or source.CATEGORIA = '3' con "source.CATEGORIA in ('1','2','3') "

    la query è diventata istantanea. (Righe interessate: 26670)
  • Allora mando fattura 200 + iva

    Mi fa piacere che la modifica è stata risolutiva
  • Dopo questa illuminante scoperta sono andato a studiarmi meglio "LIKE".

    consigliano di utilizzarlo per ricerca di dati parziali spesso unito con operatore %

    molto più onerosa in termini di risorse però.

    se si cerca un matching specifico è molto più utile =.

    se ci avessi ragionato un pò di piu avrei evitato di rompervi le scatole.

    Grazie in ogni caso dei consigli.
  • Nessuna rottura di scatole tranquillo, questo forum serve appositamente per confrontarsi e risolvere problemi. Un saluto
Devi accedere o registrarti per scrivere nel forum
9 risposte