• Super User

    @pazzomania said:

    ciao...il mio problema è che non ho le idee ben chiare dove mettere gli indici.
    Mettiamo il caso che io abbia una tabella... ID TITOLO CATEGORIA DESCRIZIONE.. con migliaia e migliaia di records.
    A questo punto...le query che faccio sono di questo tipo:
    A volte SELECT * FROM tabella WHERE categoria='$categoria'
    Ma spesse volte anche SELECT * FROM tabella WHERE categoria='$categoria' AND titolo='$titolo'

    A questo punto...visto il gran numero di record e la lentezza nell effettuare le query... mi chiedevo che indici devo fare io????:bho:

    Non saprei.... uno su una colonna.. cioè categoria.. e un altro su due colonne cioè categoria e titolo??
    Raga son un po' perso sull argomento indici...per cui accetto consigli!!:D

    Suppongo che titolo sarà sempre diverso per ogni riga. Categoria è un id oppure una stringa? Le categorie sono contenute in più righe?
    Non ti conviene fare un indice sul titolo poichè è sempre diverso. In questo modo avrai nell'indice le stesse ricghe della tabella.
    Invece per la categoria potrebbe essere diverso poichè se hai 100 righe ma solo 5 categorie allora l'indice può aumentare la velocita della query


  • User Attivo

    @ayrton2001 said:

    Suppongo che titolo sarà sempre diverso per ogni riga. Categoria è un id oppure una stringa? Le categorie sono contenute in più righe?
    Non ti conviene fare un indice sul titolo poichè è sempre diverso. In questo modo avrai nell'indice le stesse ricghe della tabella.
    Invece per la categoria potrebbe essere diverso poichè se hai 100 righe ma solo 5 categorie allora l'indice può aumentare la velocita della query

    Una stringa!
    Cmq grazie ragazzi siete stati utili come sempre!

    Ultima domanda... creare un indice... velocizza quando uso la clausola WHERE.... anche quando utilizzo LIKE?


  • Super User

    @pazzomania said:

    Una stringa!
    Cmq grazie ragazzi siete stati utili come sempre!

    Ultima domanda... creare un indice... velocizza quando uso la clausola WHERE.... anche quando utilizzo LIKE?
    Credo proprio di si.
    Creare un indice è come creare una "sottotabella".
    Ossia se io ho 100 records in cui sono presenti 10 categorie diverse il mio indice categoria avrà 10 "records" dunque la query sarà più veloce.
    Invece se avessi un indici sul titolo con 100 records l'indice rallenterebbe la query poichè vi è un "doppio passaggio" inutile


  • User Attivo

    @ayrton2001 said:

    Credo proprio di si.
    Creare un indice è come creare una "sottotabella".
    Ossia se io ho 100 records in cui sono presenti 10 categorie diverse il mio indice categoria avrà 10 "records" dunque la query sarà più veloce.
    Invece se avessi un indici sul titolo con 100 records l'indice rallenterebbe la query poichè vi è un "doppio passaggio" inutile

    ok..grazie della spiegazione!
    Ma ancora una cosa... se io ho una pagina dove voglio vedere i record piu' cliccati:
    Userei la query SELETC * FROM tabella ORDER BY click DESC

    Ma in questo caso....non esiste nulla per velocizzare la query giusto?
    Mica posso mettere un indice ai click...
    COme potre fare?


  • Super User

    @pazzomania said:

    ok..grazie della spiegazione!
    Ma ancora una cosa... se io ho una pagina dove voglio vedere i record piu' cliccati:
    Userei la query SELETC * FROM tabella ORDER BY click DESC

    Ma in questo caso....non esiste nulla per velocizzare la query giusto?
    Mica posso mettere un indice ai click...
    COme potre fare?
    Io non farei nessun indice su click


  • User Attivo

    @pazzomania said:

    Ultima domanda... creare un indice... velocizza quando uso la clausola WHERE.... anche quando utilizzo LIKE?
    Se usi il motore Myisam, i campi da ricercare con Like invece di crearli come indice li puoi creare come FullText dovrebbe essere tutto molto più veloce, se usi InnoDb non è possibile


  • Super User

    @corvo said:

    Se usi il motore Myisam, i campi da ricercare con Like invece di crearli come indice li puoi creare come FullText dovrebbe essere tutto molto più veloce, se usi InnoDb non è possibile
    Se non erro il FullText è supportato da una certa versione in poi (non ricordo quale). Giusto?


  • Moderatore

    lasciate perdere il fulltext 😞


  • Super User

    @massimux said:

    lasciate perdere il fulltext 😞
    Dai, dipende da cosa occorre fare 🙂


  • User Attivo

    @ayrton2001 said:

    Io non farei nessun indice su click

    Appunto...nemmeno io!
    Pero' il problema è... se ho centomila record...e devo ordinarli per click...voi che metodo usereste?


  • User Attivo

    @ayrton2001 said:

    Se non erro il FullText è supportato da una certa versione in poi (non ricordo quale). Giusto?
    non sa da quando ma da molto, ma ora come ora non dipende dalla versione di mysql ma dal motore che usi, innodb ha foreign key e transazioni ma non ha full text, mentre lo storico myisam ha full text e non ha transazioni ecc..

    @pazzomania, hai provato a fare dei test per calcolare i tempi? poi vista la grandezza del db mi informerei anche sulla possibilità di mettere in cache i risultati della query, ma non sono espertissimo, so che si puo fare però non so se vale la pena... dipende dalla tua applicazione... insomma io mi arrendo non voglio dire altre castronerie da programmatore della domenica 🙂


  • User Attivo

    @corvo said:

    non sa da quando ma da molto, ma ora come ora non dipende dalla versione di mysql ma dal motore che usi, innodb ha foreign key e transazioni ma non ha full text, mentre lo storico myisam ha full text e non ha transazioni ecc..

    @pazzomania, hai provato a fare dei test per calcolare i tempi? poi vista la grandezza del db mi informerei anche sulla possibilità di mettere in cache i risultati della query, ma non sono espertissimo, so che si puo fare però non so se vale la pena... dipende dalla tua applicazione... insomma io mi arrendo non voglio dire altre castronerie da programmatore della domenica 🙂

    Quello della cache potrebbe essere una buona soluzione al mio problema....Chi ne sa un po' di più?