Jump to content
Sign in to follow this  
zampi91

Organizzazione database utenti

Recommended Posts

Salve a tutti.....

Mi ritrovo attualmente con un database (MySql) di utenti . Gli utenti iscritti attualmente sono 43000 circa, forse un pò di più.

Le ricerche su questa tabella comincia a diventare giustamente lente.

Sto valutando di dividere gli utenti su più tabelle diverse secondo un criterio. Ho pensato di creare un numero di tabelle pari al numero delle lettere dell'alfabeto. Successivamente andrò a salvare gli utenti in base all'iniziale del loro NickName.

Mi spiego meglio...

Per esempio: NickName = zampi91 lo metto nella tabella Z, NickName = ciao lo metto nella tabella C.

 

così facendo diminuirei notevolmente i tempi di ricerca, e anche l'utilizzo di risorse. Secondo voi è una mossa corretta? ovviamente tutte le tabelle avranno la medesima struttura.

Share this post


Link to post
Share on other sites
Salve a tutti.....

Mi ritrovo attualmente con un database (MySql) di utenti . Gli utenti iscritti attualmente sono 43000 circa, forse un pò di più.

Le ricerche su questa tabella comincia a diventare giustamente lente.

Sto valutando di dividere gli utenti su più tabelle diverse secondo un criterio. Ho pensato di creare un numero di tabelle pari al numero delle lettere dell'alfabeto. Successivamente andrò a salvare gli utenti in base all'iniziale del loro NickName.

Mi spiego meglio...

Per esempio: NickName = zampi91 lo metto nella tabella Z, NickName = ciao lo metto nella tabella C.

 

così facendo diminuirei notevolmente i tempi di ricerca, e anche l'utilizzo di risorse. Secondo voi è una mossa corretta? ovviamente tutte le tabelle avranno la medesima struttura.

 

Il tuo ragionamento è giusto in teoria, ma una select su 43000 righe non dovrebbe essere la morte del server.

Ci sono forum con anche centinaia di migliaia di utenti registrati (attivi poi è da ridere, ma lasciamo perdere) con una singola tabella.

 

Considera che facendo il tuo discorso dovresti rivedere tutte le routine di inserimento, modifica etc...

 

Invece ti consiglio di vedere la pesantezza della singola riga e l'effettiva necessità di caricare tutti i dati sull'utente ogni volta.

Intendo dire che una tabella snella solo con id user e password e poco altro va bene per fare login e gestire i permessi. E la ricerca veloce

 

Altri dati che non si usano sempre andrebbero divisi in altre tabelle anche se il primo istinto potrebbe far pensare di mettere tutto sul record dell'utente.

Se ho le sue personali impostazioni di backend o del sito, è meglio metterle su tabella a parte (con id user come indice) che si chiamerà solo quando serve a lui e non quando altri utenti lo cercano.

Idem per note, fimra, avatar, indirizzo sua homepage etc....

 

Una volta che sai che l'id XX (numero) corrisponde a Caio ricercare l'id numero XX su altre tabelle (solo quando serve) è più veloce che cercare su testo.

 

Si chiama micronizzazione delle query. Fai più query ma più piccole e snelle piuttosto che una sola ma pesante.

Share this post


Link to post
Share on other sites

Effettivamente... potrei tenere una di autenticazione diciamo, con le informazioni realmente importanti. Poi la seconda con le informazioni aggiuntive. Giusto? ovviamente entrambe legate da l'ID

Share this post


Link to post
Share on other sites
Effettivamente... potrei tenere una di autenticazione diciamo, con le informazioni realmente importanti. Poi la seconda con le informazioni aggiuntive. Giusto? ovviamente entrambe legate da l'ID

 

Esatto, una o più di una secondaria a seconda dell'uso.

Share this post


Link to post
Share on other sites

Salve,

Beh, il fatto che la tabella abbia un indice, di per sè, non dice nulla ...

E' utilizzato tale indice nelle letture ? se sì, totalmente o parzialmente ?

43.000 righe in tabella, non sono poi tantissime , neppure per un table scan ...

 

Ciao !!

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×