Visualizzazione dei risultati da 1 a 7 su 7

Discussione: problema prestazioni

  1. #1

    problema prestazioni

    ciao a tutti

    il mio database è composto da 3 tabelle unite tra loro attraverso una colonna indice che è uguale per tutte. Le tabelle sono 3 perchè sql ha il limite di 8060 caratteri per riga di tabella e per me non era sufficiente.
    I campi delle tabelle sono circa 200 e i record inseriti sono circa 20.000.

    Da quando ho diviso il database in 3 tabelle per superare il limite dei 8060 caratteri però le prestazioni sono NOTEVOLMENTE peggiorate; addirittura il risultato di una query non mi viene mai visualizzato per timout expired.

    la query è la seguente: (non mettetevi a ridere è l'unica cosa che mi sono riuscito ad inventare )

    SELECT *
    FROM dbo.supervisore
    WHERE (nomeazienda LIKE '%razienda%') and (esito LIKE '%resito%') and (datatelefonata > 'rdata') and (note LIKE '%rnote%') and (categorie LIKE '%rcategoria%') and ((data1 > 'rdataagente' and data2 is null) or (data2 > 'rdataagente' and data3 is null) or (data3 > 'rdataagente' and data4 is null) or (data4 > 'rdataagente' and data5 is null) or (data5 > 'rdataagente' and data6 is null) or (data6 > 'rdataagente' and data7 is null) or (data7 > 'rdataagente' and data8 is null) or (data8 > 'rdataagente' and data9 is null) or (data9 > 'rdataagente' and data10 is null) or (data10 > 'rdataagente' and data11 is null) or (data11 > 'rdataagente' and data12 is null) or (data12 > 'rdataagente' and data13 is null) or (data13 > 'rdataagente' and data14 is null) or (data14 > 'rdataagente' and data15 is null) or (data16 > 'rdataagente' and data17 is null) or (data17 > 'rdataagente' and data18 is null) or (data18 > 'rdataagente' and data19 is null) or (data19 > 'rdataagente' and data20 is null) or (data20 > 'rdataagente')) and ((esito1 LIKE '%resitoagente%' and esito2 = 'N / A') or (esito2 LIKE '%resitoagente%' and esito3 = 'N / A') or (esito3 LIKE '%resitoagente%' and esito4 = 'N / A') or (esito4 LIKE '%resitoagente%' and esito5 = 'N / A') or (esito5 LIKE '%resitoagente%' and esito6 = 'N / A') or (esito6 LIKE '%resitoagente%' and esito7 = 'N / A') or (esito7 LIKE '%resitoagente%' and esito8 = 'N / A') or (esito8 LIKE '%resitoagente%' and esito9 = 'N / A') or (esito9 LIKE '%resitoagente%' and esito10 = 'N / A') or (esito10 LIKE '%resitoagente%' and esito11 = 'N / A') or (esito11 LIKE '%resitoagente%' and esito12 = 'N / A') or (esito12 LIKE '%resitoagente%' and esito13 = 'N / A') or (esito13 LIKE '%resitoagente%' and esito14 = 'N / A') or (esito14 LIKE '%resitoagente%' and esito15 = 'N / A') or (esito16 LIKE '%resitoagente%' and esito17 = 'N / A') or (esito17 LIKE '%resitoagente%' and esito18 = 'N / A') or (esito18 LIKE '%resitoagente%' and esito19 = 'N / A') or (esito19 LIKE '%resitoagente%' and esito20 = 'N / A') or (esito20 LIKE '%resitoagente%')) and (note1 LIKE '%rnoteagente%' or note2 LIKE '%rnoteagente%' or note3 LIKE '%rnoteagente%' or note4 LIKE '%rnoteagente%' or note5 LIKE '%rnoteagente%' or note6 LIKE '%rnoteagente%' or note7 LIKE '%rnoteagente%' or note8 LIKE '%rnoteagente%' or note9 LIKE '%rnoteagente%' or note10 LIKE '%rnoteagente%' or note11 LIKE '%rnoteagente%' or note12 LIKE '%rnoteagente%' or note13 LIKE '%rnoteagente%' or note14 LIKE '%rnoteagente%' or note16 LIKE '%rnoteagente%' or note17 LIKE '%rnoteagente%' or note18 LIKE '%rnoteagente%' or note19 LIKE '%rnoteagente%' or note20 LIKE '%rnoteagente%')
    ORDER BY nomeazienda ASC


    allora: razienda, resito, rdata ecc ecc sono url parameter che immetto da una maschera in asp.

    la ricerca non mi da problemi se sfrutto molti parametri di ricerca tra quelli disponibili, però se ad esempio immetto solo rdataagente o resitoagente mi da timeout expired dopo 20 sec di elaborazione che tralaltro blocca praticamente il server (IBM netfinity 5000).

    come faccio a incrementare le prestazioni costruendo una query in modo umano?

    grazie a tutti e ciao

  2. #2

    E ci credo che le prestazioni sono diminuite!!!
    Una query del genere è spaventosa!!
    Con tutti quei LIKE poi... !!

    Allora... cerchiamo di ragionare.. non puoi effettuare query del genere, è necessario pensare bene le problematiche che devi affrontare e poi si cerca di strutturare un piano di azione.

    Alcuni esempi: i campi aziende e categorie sarebbe meglio inserirli in un'altra tabella collegate da un ID univoco.... in questo caso non dovresti utilizzare il LIKE per eseguire la query....
    Poi.. tutte quelle ricerche per data.... non è meglio spezzare la richiesta??? Da dove vengono interrogate scusa? Da pagine Web oppure utilizzi un'applicazione personale? Non puoi costruire delle pagine che interrogano "a passi" il database??

    Insomma... la cosa è molto articolata... ti posso solo dire che un database prima di essere creato dovrebbe essere strutturato in modo da darti buone prestazioni a seconda delle problematiche di richiesta dati. E' quindi corretto fare una giusta valutazione degli indici, relazioni e tipi di campi. Nel tuo caso vedo solo un database strutturato "solo testo" e con una query che richiama n LIKE (funzione che appesantisce molto il server).

  3. #3
    grazie mille per i consigli ZofM.

    Sto già pensando a una riorganizzazione delle query e ad alcune funzioni (come il coalesce e il case when che mi permetterebbero di allegerire notevolmente le query che vengono eseguite dalle pagine web in asp)

    ti farò sapere se sono riuscito nel mio intento!

    cmq l'oggetto "supervisore" che è interrogato dalla mia "query" (la query dei pazzi tanto per intenderci ghhghgh)
    è a sua volta una query che fa riferimento a una query che fa riferimento a 4 tabelle collegate tra di loro con dei campi indici.

    sono un autodidatta, è' la prima volta che mi dedico a un database in sql così vasto, le problematiche di prestazioni non le ho mai affrontate quindi cercate di capirmi.... hehhehe


    ciao a tutti!

  4. #4
    allora con alcune modifiche (non alla struttura delle tabelle cmq) sono riuscito a velocizzare e non mi da + timout expired.

    Cmq è lo stesso molto lenta:

    mi spiego, se eseguo la query dal query builder dell'enterprise manager di sql server

    per esempio

    select * from supervisore where ultimoesito like '%appuntamento%' and ultimadata > '1/1/02' and nomeazienda like '%s%'

    il risultato mi viene visualizzato in 2 secondi.

    se invece la stessa query la eseguo dalla pagina asp il risultato è visualizzato in 10 / 15 secondi

    come mai?

    c'è modo di velocizzare?

    poi la funzione di indicizzazione delle tabelle potrebbe essermi utile? (non so minimamente cosa sia)
    E' una procedura irreversibile?


    grazie per l'attenzione

  5. #5
    Scusa ma ... quanti risultati restituisce questa query?
    Devi tenere conto che quando la esegui dalle pagine ASP i risultati devono essere impaginati... Viene quindi fuori una pagina enorme se i risultati sono abbastanza...

  6. #6
    beh i risultati sono una cinquantina ma vengono visualizzati 25 per pagina....


    volevo solo sapere se è vero che c'è un calo delle prestazioni interrogando il server con una pagina asp rispetto che direttamente in locale dall'enterprise manager.

    inoltre pensi che indicizzare dei campi (quelli su cui eseguo ricerche tipo "like" potrebbe velocizzare le query o no.
    Che svantaggi da l'indicizzazione? (spazio occupato, limiti nella modifica di una tabella ecc ecc)
    grazie di nuovo!

  7. #7
    Utente di HTML.it L'avatar di aless
    Registrato dal
    Nov 2000
    Messaggi
    97

    ASP è + lento

    ciao Radmond,

    sicuramente asp è + lento rispetto all'interrogazione in locale semplicemente perchè l'enterprise manager agisce direttamente sul server SQL mentre le asp vengono codificate attraverso IIS.
    per la query concordo con ZOFM, non puoi buttare tutti quei parametri nella stessa interrogazione.
    il mio consiglio, peraltro banale, è quello di cercare di suddividere in blocchi le interrogazioni facendo passare come query successive i risultati delle interrogazioni precedenti.
    è + difficile da spiegare che da fare, in asp basta studiarsi bene dei campi hidden ed il gioco è fatto.

    fammi sapere.

    ciao

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 © 2025 vBulletin Solutions, Inc. All rights reserved.