Query molto lenta...migliorabile?

di il
9 risposte

Query molto lenta...migliorabile?

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

  • Re: Query molto lenta...migliorabile?

    Salve,
    almeno la colonna [NOME] nelle 2 tabelle e' indicizzata?
    salutoni
    --
    Andrea
  • Re: Query molto lenta...migliorabile?

    Faccio una ricostruzione indici e poi riprovo.
  • Re: Query molto lenta...migliorabile?

    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...
  • Re: Query molto lenta...migliorabile?

    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?
  • Re: Query molto lenta...migliorabile?

    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)
  • Re: Query molto lenta...migliorabile?

    Allora mando fattura 200 + iva

    Mi fa piacere che la modifica è stata risolutiva
  • Re: Query molto lenta...migliorabile?

    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.
  • Re: Query molto lenta...migliorabile?

    Nessuna rottura di scatole tranquillo, questo forum serve appositamente per confrontarsi e risolvere problemi. Un saluto
  • Re: Query molto lenta...migliorabile?

    Salve a tutti,
    relativamente all'operatore LIKE (talvolta valutabile in sostituzione a CHARINDEX), giusto per conoscenza consiglio anche la lettura di articoli tipo https://www.brentozar.com/archive/2016/10/searching-strings-sql-server-expensive/ e https://cc.davelozinski.com/sql/like-vs-substring-vs-leftright-vs-charindex
    salutoni
    --
    Andrea
Devi accedere o registrarti per scrivere nel forum
9 risposte