- Home
- Categorie
- Coding e Sistemistica
- PHP
- A che colonne creare l'indice?
-
@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!!:DSuppongo 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
-
@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 queryUna stringa!
Cmq grazie ragazzi siete stati utili come sempre!Ultima domanda... creare un indice... velocizza quando uso la clausola WHERE.... anche quando utilizzo LIKE?
-
@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
-
@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" inutileok..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 DESCMa in questo caso....non esiste nulla per velocizzare la query giusto?
Mica posso mettere un indice ai click...
COme potre fare?
-
@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 DESCMa 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
-
@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
-
@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?
-
lasciate perdere il fulltext
-
@massimux said:
lasciate perdere il fulltext
Dai, dipende da cosa occorre fare
-
@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?
-
@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
-
@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ù?