Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167

    Molte query, pagina pesante, come fare?

    Vengo subito al punto:
    uso MySQL (ho appena migrato da Access), il DB non è grande (circa 2-3 MB) ma nell'homepage del sito che sto realizzando avrei bisogno di estrarre molti records da molte tabelle differenti, purtroppo senza alcun legame tra di loro.

    Ecco qui di seguito, alcune delle query da eseguire:

    codice:
    (estrarre alcuni dati relativi all'ultimo record inserito nella tabella news)
    sql = "SELECT id,titolo,testo,immagine FROM news ORDER BY id DESC LIMIT 1"
    
    (estrarre alcuni dati relativi all'ultimo record inserito nella tabella articoli)
    sql = "SELECT id,autore,titolo,testo FROM articoli ORDER BY id DESC LIMIT 1"
    
    (estrarre altri due records in maniera randomica dalla tabella articoli controllando tramite l'id che non venga pescato l'ultimo, già mostrato in precedenza)
    sql = "SELECT id,autore,titolo FROM articoli WHERE id <> "& id_ultimo_articolo &" ORDER BY RAND() LIMIT 2"
    
    (estrarre alcuni dati in maniera randomica dalla tabella gruppi)
    sql = "SELECT id,nome,testo,img FROM gruppi ORDER BY RAND() LIMIT 1"
    come fatto per la tabella articoli poi, bisognerebbe fare per altre tre tabelle, arrivano ad avere alla fine, una decina di query.

    naturalmente tutto ciò porta ad un sovraccarico dell'attività del server con conseguenze che purtroppo ben conosciamo...

    Ho letto che in casi come questi verrebbero in aiuto le clausole JOIN e UNION ma solo se tra le varie query c'è una relazione, oppure se i campi estratti sono lo stesso numero e dello stesso tipo.

    C'è una soluzione che mi consenta di rendere il tutto più performante?


    p.s.:spero di aver indicato tutto ciò che serve
    p.s.2: ero indeciso se postare qui o in Database :master:

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Se usi MySQL 5 potresti usare Stored Procedure.


    Roby

  3. #3
    secondo me puoi fare una UNION, normalizzando le query. ad esempio, laddove mancano le immagini puoi aggiungere

    ... '*' as IMG ...


  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167
    per quanto riguardo le stored procedure devo ammettere di non averne mai fatto uso e a tal proposito mi sto leggendo gli articoli qui su html.it ma una cosa non mi è chiara: la procedura viene salvata direttamente nel db e poi richiamata tramite la pagina .asp.
    in questo caso che vantaggi avrei? in fin dei conti il server esegue lo stesso tutte le operazioni sul db come se le query fossero separate, no?


    @optime: cosa intendi per "normalizzare"?
    inoltre, come posso unire due query, per esempio quella sulla tabella articoli e quella sulla tabella gruppi se i campi estratti sono diversi in numero e formato?
    e'è poi anche il problema delle query che estraggono dati random, in quel caso prima di eseguirle dovrei comunque ottenere l'id dell'ultimo record della tabella in modo da non rischiare di ripescarlo

    che macello :|

  5. #5
    ti ho già risposto... ragionaci un po'

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167
    ho provato e riprovato ma sinceramente non riesco a capire cosa tu intenda con l'aggiungere "*" as IMG, nè per "normalizzare" le query.


    se per esempio, prendo le due query:
    codice:
    (estrarre alcuni dati relativi all'ultimo record inserito nella tabella articoli)
    sql = "SELECT id,autore,titolo,testo FROM articoli ORDER BY id DESC LIMIT 1"
    
    (estrarre altri due records in maniera randomica dalla tabella articoli controllando tramite l'id che non venga pescato l'ultimo, già mostrato in precedenza)
    sql = "SELECT id,autore,titolo FROM articoli WHERE id <> "& id_ultimo_articolo &" ORDER BY RAND() LIMIT 2"
    potrei scrivere qualcosa del tipo
    codice:
    sql = "SELECT id,autore,titolo,testo FROM articoli ORDER BY id DESC LIMIT 1 UNION SELECT id,autore,titolo FROM articoli ORDER BY RAND() LIMIT 2"
    ma in quel caso non avrei più il controllo WHERE id <> "& id_ultimo_articolo &" quando eseguo la seconda query (serve per non pescare casualmente lo stesso record della prima query).



    inoltre, è davvero possibile ridurretutte quelle query ad una sola chiamata al DB?

    come fanno i portali che in homepage mostrano un sacco di dati/statistiche?

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.