Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [mysql] query più veloce su tabella grande o su più tabelle?

    Il titolo dice tutto.
    Potrei fare delle prove vedendo i tempi esecuzione, però magari qualcuno le ha già fatte o ne ha letto da qualche parte.
    Ho già pronto il mio sistema di estrazione che partendo dall'url friendly mi permette di estrarre con una sola query la mia pagina messa in infinite categorie e subcategorie.
    Ora il problema che mi pongo è se all'aumentare delle pagine (intendo inserirci forum e tutto) mettiamo per esempio milioni (ma potrebbe essere di più) sia più veloce in ricerca una sola tabella o due di cui una per categorie (o folder o cartelle) e l'altra per le pagine/contenuti veri e propri.
    Ad occhio mi sembra uguale (ma se nessuno mi da info debbo fare dei test), anzi dato che in un unica tabella uso una sola query, con due tabelle anche se continuo a usare una sola query (non ho ancora pensato l'implementazione) dovrei comunque complicarla quindi rendere il sistema più lento. L'unica alternativa potrebbe essere dividere in più categorie/tabelle, cosa che però non vorrei fare se non necessario.

    Grazie per eventuali info, spunti, consigli etc...

    Ah dimenticavo, ovviamente comunque metto le query in cache, quindi le più frequenti non saranno ripetute in continuo, però lo stesso voglio ottimizzare il più possibile.



  2. #2
    La velocità dipende dagli indici, dalle risorse del server (es. CPU, RAM), dall'ottimizzazione delle query, dal carico di utenti, dal codice utilizzato per accedere al database, etc.

  3. #3
    Originariamente inviato da filippo.toso
    La velocità dipende dagli indici, dalle risorse del server (es. CPU, RAM), dall'ottimizzazione delle query, dal carico di utenti, dal codice utilizzato per accedere al database, etc.
    Ah beh... adesso si che ho capito come fare

    Scusa se te lo chiedo, ma hai letto il mio post? Perchè dalla risposta non sembrerebbe
    (oppure l'ho scritto male, in tal caso cerco di spiegarlo meglio)

    Che cavolo c'entrano le risorse del server etc??
    Io voglio comparare due sistemi, che li faccia girare su un pallottoliere o su un super pc della nasa, in 2 utenti o con 200000000 (purchè con entrambi i sistemi lo stesso numero) la comparazione è sempre quale dei due è meglio.
    Senza offesa e rancore

  4. #4
    Due query possono essere piu' performanti su un server multi-core rispetto ad una sola query eseguita sullo stesso sistema e viceversa.

    La struttura delle tabelle, la gestione degli indici, l'ottimizzazione delle query, sono tutti elementi che vanno ad influire sulla velocità. Una tabella con dei pessimi indici e delle query non ottimizzate possono essere molto piu' lente o molto piu' veloci di una sola query.

    Se gli indici sono ottimizzati per le query che si devono eseguire e, viceversa, le query sono ottimizzate per gli indici creati, il numero degli elementi della tabella è relativamente ininfluente.

    Un ricerca binaria su un indice di 1.000.000 di elementi prevede 20 "comparazioni", per 2.000.000 di elementi, 21 "comparazioni", per 100.000.000 milioni di elementi, 27 "comparazioni".

    Senza maggiori dettagli sul modo preciso in cui intendi implementare la ricerca, suggerire una soluzione o l'altra è semplicemente tirare ad indovinare.

  5. #5
    Scusa se te lo chiedo, ma hai letto il mio post? [...]
    Che cavolo c'entrano le risorse del server etc??
    Secondo me, sei te che non hai letto bene la risposta di filippo.toso.
    La stessa tabella con 2 miliardi di record può dare tempi di esecuzione diversi per tantissimi motivi concomitanti, non ultime le prestazioni del server.

    Ci sono davvero molti fattori che influenzano le prestazioni di un DB: se la tabella è indicizzata la query è più veloce, se la tabella è ottimizzata idem. Un JOIN fra due tabelle diverse potrebbe essere rallentato se una delle due non è ottimizzata mentre l'altra sì.

    Il discorso non è solo insito nel collegare o meno due o più tabelle.
    Peraltro, la stessa struttura di tabella si comporta diversamente in base allo storage engine (MyISAM, InnoDB, Memory).
    Mettici poi anche che se il tuo DB mysql è installato in un host condiviso, le prestazioni possono essere veramente diverse di minuto in minuto per via degli accessi concomitanti.

    Insomma... mi sembra un po' precipitoso parlare di prestazioni di una query se prima non si è pensato ad ottimizzare il DB stesso.
    È un po' come quando si fanno le gare di "dimensioni" da ragazzini. Si pensa alle misure, e magari non si è mai utilizzato lo "strumento" se non per sessioni solitarie!

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  6. #6
    Si... si... adesso ho la conferma, ho scritto male io se non riuscite a capire quello che chiedevo

    disegnino esemplificativo:

    situazione A: ho una tabella
    tabella 1: "id", "nome", campi vari, esempio tipo "permessi per la pagina", "template".

    situazione B ho due tabelle a relazione univoca:
    tabella 1: "id", "nome"
    tabella 2: "id", "nome", parentela con campo id di tabella 1, "permessi", "template"

    situazione C, ho 3 tabelle:
    tabella 1: "id", "nome"
    tabella 2: "id", "nome", "permessi", "template"
    tabella 3: "id tabella1", "id tabella 2" per metterli in relazione


    la terza mi sembra inutile per due tabelle dato che la relazione è comunque una a molti e non molti a molti, ma tra la prima e la seconda senza test non ho idea sull'effettiva velocità, ad occhio la prima è migliore.

    Ora per chiarezza, io non sto ottimizzando per un solo server, io voglio fare un programma che posso usare ed installare dove voglio, senza limiti e senza sapere a quanta gente serve, tra parentesi ammesso che esista programmazione multicore in php o mysql (sarei proprio curioso di istruirmi, non conosco questa realtà, se esiste, sono sempre contento di conoscere qualcosa di nuovo) se la seconda query dipende dalla prima dubito che io possa mandarle in elaborazione in parallelo... ma se mi spiegate in concreto ve ne sarò grato.

    Spero che sia più chiaro... non so se vi rendete conto, ma da quello che avete scritto chi produce antivirus, editor di testo, partizionatori, fogli di calcolo o che altro lo dovrebbe fare solo per un determinato pc, dovrebbe compilare il programma appositamente (o dare i sorgenti da compilarsi autonomamente) cosa che in realtà non è (non sempre almeno), altrimenti non esisterebbe neanche internet....
    Certo, tutto si può ottimizzare al meglio, ma se seguo il vostro discorso prima di scrivere il programma devo fare delle audizioni a tutti i futuri utenti del mio sito e vedere in che modo entreranno e dove poseranno gli occhi in prima battuta, e se digitano con una sola mano perchè con l'altra i stanno grattando il naso etc etc....
    (tra parentesi ci sono studi in tal senso, ma se non avete voglia di rispondermi non mi parlate di astrofisica se vi chiedo dove mi conviene parcheggiare la macchina per aver ombra oggi pomeriggio )

    Simpaticamente vi saluto, pomeriggio faccio dei test, ho capito che chi fa da se.... poi vi faccio sapere (anche se non vi interessa)


  7. #7
    Quali indici utilizzi? Come è strutturata la query di selezione?

    io non sto ottimizzando per un solo server, io voglio fare un programma che posso usare ed installare dove voglio, senza limiti e senza sapere a quanta gente serve
    Le note fatte in merito ad indici, ottimizzazione di query (etc) rimangono comunque valide. Anzi, per certi versi, l'ottimizzazione dovrebbe essere spinta ancor di più se non vuoi avere un sistema che si siede a causa di un carico eccessivo del server (tipico su sistemi shared e vps).

    ammesso che esista programmazione multicore in php o mysql (sarei proprio curioso di istruirmi, non conosco questa realtà, se esiste, sono sempre contento di conoscere qualcosa di nuovo) se la seconda query dipende dalla prima dubito che io possa mandarle in elaborazione in parallelo...
    La "programmazione multicore" non esiste ne in PHP, ne in MySQL. Esiste il multi-threading ed il multi-process implementato dal server web e da MySQL. La tua nota "se la seconda query dipende dalla prima" è valida solo se il sistema è mono utente. Non appena si hanno più utenti concorrenti, un'applicazione che può essere eseguita in maniera "non-atomica", senza dover impiegare tutte le risorse della CPU (core) in modo sequenziale potrà essere gestita in modo più ottimale dal processore e dal software.

    da quello che avete scritto chi produce antivirus, editor di testo, partizionatori, fogli di calcolo o che altro lo dovrebbe fare solo per un determinato pc
    Da quello che hai scritto non sembra tu comprenda fino in fondo la differenza tra un editor di testo ed un database che deve gestire 200.000.000 di record. Ne della differenza che consiste tra "ottimizzare un indice ed una query" e compilare un'applicazione per una CPU target specifica.

    Certo, tutto si può ottimizzare al meglio, ma se seguo il vostro discorso prima di scrivere il programma devo fare delle audizioni a tutti i futuri utenti del mio sito
    Sai che cosa significa "ottimizzare una query" o "creare degli indici"?

    Per fare questo NON è necessario fare alcuna audizione. E' sufficiente studiare la query che vuoi eseguire, individuare i campi utilizzati, creare i relativi indici, eventualmente utilizzare EXPLAIN, ristrutturare la tabella in modo da sfruttare al massimo gli indici creati, eventualmente creare delle tabelle d'appoggio per migliorare le ricerca su chiavi specifiche (es. quelle piu' utilizzate). Tutto questo non richiede di conoscere ne cosa faranno gli utenti, ne su quale piattaforma andrai a fare il deploy dell'applicazione.

    Prima di iniziare a parlare di "velocità", studiati le basi di creazione di database, indici ed ottimizzazioni comprese.

  8. #8
    Non ci capiamo, almeno quello che scrivo non è capito o, ripeto, spiegato male da me.

    Prima mi si chiede su che server girerà etc... quando dico che per me ottimizzazione è la cosa migliore a prescindere dal server su cui girerà e da quanti utenti dovrà sopportare mi si risponde che l'ottimizzazione "dovrà essere spinta ancor di più".
    Invece se uso 1000 server in parallelo me ne frego? Mah....

    Io non sarò al tuo livello (affermazione retorica), ma il mio ragionamento è:
    ottimizzo al meglio possibile, almeno al meglio che sono in grado fare, perchè quello che non sono in grado di fare non posso farlo, poi se uso il tutto su un server che non ce la fà bisogna cambiare server (o aggiungere risorse, o altro), punto.
    Tutto il resto sono chiacchiere.
    Logica barbara, rozza, rudimentale ma molto concreta, che dici?

    Se ho due query e una dipende dal risultato dell'altra c'è poco da inventarsi, sempre sequenziali debbono essere, se c'è un'altro utente con altre due query non gestisco io che siano processate dall'altro core visto che come confermi programmazione multicore non esiste in php e mysql, non sono poi così fuori... e sei arrivato dove volevo, il dual core se lo gestisce direttamente il web server nel suo insieme mysql compreso e la mia ottimizzazione è ininfluente (deve esserlo) dal tipo di macchina che utilizzerò, perchè dicevi il contrario?
    Forse dovremmo metterci d'accordo sui termini, per me (e anche per il dizionario italiano) ottimizzazione non significa relativa a qualche cosa, ma significa la scelta migliore a prescindere dalle condizioni.

    Per quelle che sono le mie conoscenze (che non ho intenzione di snocciolare, possono essere poche o tante poco importa) con php e mysql non è possibile ottimizzare in base al tipo di server hardware utilizzato, se qualcuno afferma il contrario per correttezza dovrebbe fare esempi pratici e concreti.
    Se utilizziamo altri linguaggi o almeno parti in altri linguaggi il discorso può cambiare.

    L'unica accezione che posso pensare (magari mi sfugge qualcosa) è il caso di accesso simultaneo di più utenti in scrittura sugli stessi record, volendo gestire in maniera programmatica il look ed unlook dei campi senza lasciar fare il tutto a mysql, ma non era il caso che stavo prospettando e per un'applicazione web (non in intranet) mi viene difficile trovare i motivi di un tale approccio, magari ce ne saranno che non mi vengono in mente.

    Certo che c'è differenza tra un editor di testo e un gestionale che deve gestire un database, però anche un editor può essere più veloce e performante di un altro a parità di funzionalità, quella per me ( e non solo) è ottimizzazione, che ripeto è fatta (quando fatta, quando saputa fare) a prescindere dal pc su cui verrà utilizzato il programma.

    Mi rendo conto che la domanda che ho fatto all'inizio può sembrare stupida (non lo è se si capisce), ma non è giustificato che si cerchi di liquidarla con sufficienza, se mi si fosse detto: "per me non ci sono dati a sufficienza per risponderti" lo avrei accettato, magari avrei provato a fornirli, ma non si possono tirare in ballo cose che non c'entrano nulla con la domanda.
    se io dicessi
    ci vuole più tempo a far calcolare 1+2+3 o 3x2?
    che me ne frega che cpu e quanti utenti uso? E' ovvio che parliamo a pari condizioni, qualsiasi queste siano... non capisco la difficoltà, o meglio la capisco ma non voglio dirlo per non suscitare rancori più di quello che ho già fatto.

    saluti...




    # Eppure ricordo che c'erano utenti.. che fine hanno fatto?

  9. #9
    Prima mi si chiede su che server girerà etc...
    Potresti indicare dove ti è stato chiesto "su che server girerà"?

    quando dico che per me ottimizzazione è la cosa migliore a prescindere dal server su cui girerà e da quanti utenti dovrà sopportare mi si risponde che l'ottimizzazione "dovrà essere spinta ancor di più".
    Parli di "ottimizzazione" ma non ha ancora indicato i due elementi principali necessari per farla: indici e query.

    Invece se uso 1000 server in parallelo me ne frego?
    Se devi sviluppare un'applicazione per un ambiente controllato, l'ottimizzazione può essere limitata alla reale necessità. In altre parole, se l'ambiente in cui viene eseguito può essere modificato a piacimento (es. è scalabile), l'ottimizzazione può essere limitata a favore della facilità di manutenzione del codice e così via.

    Se l'applicazione deve essere altamente performante su qualsiasi sistema, lo sforzo di ottimizzazione dovrà essere maggiore visto che non si avrà un controllo diretto e puntuale sulla piattaforma di produzione.

    ottimizzo al meglio possibile
    Non hai ancora indicato quali indici utilizzi e come è strutturata la query di selezione, come intendi fare queste ottimizzazioni?

    Logica barbara, rozza, rudimentale ma molto concreta, che dici?
    Non è una questione di logica, è una questione di progettazione e sviluppo. Puoi continuare a voler dire che vuoi "ottimizzare" ma non sembra tu abbia capito che non si tratta di 2 tabelle VS 1. Si tratta di indici, di query etc. Spezzare la tabella in 2 o più è una scelta (forse) successiva.

    Se ho due query e una dipende dal risultato dell'altra c'è poco da inventarsi, sempre sequenziali debbono essere
    Solo se l'applicazione è mono utente. Se ci sono più utenti, spezzare una query atomica pesante in due query separate permetterà al database ed alla CPU di gestire al meglio le risorse. Si chiama load-balancing.

    il dual core se lo gestisce direttamente il web server nel suo insieme mysql compreso e la mia ottimizzazione è ininfluente (deve esserlo) dal tipo di macchina che utilizzerò, perchè dicevi il contrario?
    Studiati il load balancing in MySQL e nelle CPU multi core e poi ne riparliamo.

    Forse dovremmo metterci d'accordo sui termini, per me (e anche per il dizionario italiano) ottimizzazione non significa relativa a qualche cosa, ma significa la scelta migliore a prescindere dalle condizioni.
    Hai letto il capitolo intitolato "Optimizing SELECT and Other Statements" del manuale di MySQL? E' quello che intendo per ottimizzazione.

    Inoltre, nel campo informatio, l'affermazione "a prescindere dalle condizioni" non può essere applicata in modo universale visto che l'applicazione verrà comunque eseguita su un sistema e non in un ambiente ipotetico.

    L'esempio più classico sono quegli algoritmi di ottimizzazione che "in teoria" sono perfetti mentre in pratica non possono essere eseguiti perchè richierebbero maggior memoria di quella disponibile ("a prescindere dalle condizioni").

    con php e mysql non è possibile ottimizzare in base al tipo di server hardware utilizzato
    Chi ha mai parlato di "ottimizzazione in base al tipo di server hardware"?

    Qui si parla di ottimizzazione di una tabella di un database. Di indici, di query etc.

    volendo gestire in maniera programmatica il look ed unlook dei campi senza lasciar fare il tutto a mysql
    Non starai micha pensando di poter implementare in PHP un sistema di locking migliore di quello di MySQL, vero?

    a non è giustificato che si cerchi di liquidarla con sufficienza
    Sto ancora aspettando che tu scriva quali indici stai utilizzando e come è strutturata la query di selezione.

    Puoi continuare a scrivere post chilometrici, ma se non fornisci queste informazioni, nessuno ti potra' dire come ottimizzare la tua tabella, perchè è come se chiedessi come strutturare una tabella senza dire che cosa ci vuoi inserire.

    ci vuole più tempo a far calcolare 1+2+3 o 3x2?
    che me ne frega che cpu e quanti utenti uso?
    "Te ne frega" perchè differenti CPU impiegano tempi differenti per calcolare le somme, le moltiplicazioni, le divisioni etc.

    E' ovvio che parliamo a pari condizioni, qualsiasi queste siano.
    Mai sentito parlare di "scalabilità". Delle soluzioni più performanti con pochi utenti degradano velocemente all'aumentare degli utenti. L'esempio tipico sono gli algoritmi di ordinamento.

    non capisco la difficoltà
    Non capisco la difficoltà di postare la struttura della tabella che utilizzi, completa di indici, chiavi etc e la struttura della query di selezione che dovrai utilizzare.

  10. #10

    Re: [mysql] query più veloce su tabella grande o su più tabelle?

    Originariamente inviato da Ermopoli
    Il titolo dice tutto.
    Potrei fare delle prove vedendo i tempi esecuzione...

    Ora il problema che mi pongo è se all'aumentare delle pagine (intendo inserirci forum e tutto) mettiamo per esempio milioni (ma potrebbe essere di più) sia più veloce in ricerca una sola tabella o due di cui una per categorie (o folder o cartelle) e l'altra per le pagine/contenuti veri e propri.
    Aggiungo alle corrette osservazioni fatte dagli altri che l'errore tuo è ancora più a monte, e ti stai ponendo il problema sbagliato.
    La tua situazione è infatti quella di un database non normalizzato. In caso lo fosse infatti la domanda che ti stai facendo non si porrebbe nemmeno.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

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.