IMHO Non è necessario suddividerlo fisicamente. Tuttavia, sarebbe bello memorizzarlo nella cache.
Se la users
tabella utilizza MyISAM Storage Engine, hai un bel vantaggio.
Poiché MyISAM memorizza solo nella cache gli indici, potresti fare due cose
- È possibile creare una cache delle chiavi personalizzata solo per caricare l'indice MyISAM
users
solo per la tabella
- È possibile indicizzare il nome utente e la password per forzare la query a colpire solo quella cache di chiavi personalizzate
Assicurarsi che esistano i seguenti indici per users
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Esistono due (2) ragioni principali per i due indici
MOTIVO dell'indice n. 1
L'indice username_ndx
impedisce a un nome utente di avere più password e impedisce a più utenti con lo stesso nome
MOTIVO dell'indice n. 2
L'indice username_password_ndx
fornisce un indice di copertura . Pertanto, la query cercherà il nome utente e la password solo nella cache MyISAM personalizzata, anziché controllare la tabella.
Ulteriori collegamenti sui principi di copertura degli indici
La prossima cosa è creare effettivamente quella cache di chiavi personalizzate. Ecco i comandi per creare una cache delle chiavi da 8 MB e caricare quella cache delle chiavi dedicata (Esempio: se la tabella è mydb.users
):
SET GLOBAL authentication_cache.key_buffer_size = 1024 * 1024 * 8;
CACHE INDEX mydb.users IN authentication_cache;
LOAD INDEX INTO CACHE mydb.users;
Dovresti inserire queste tre righe nel file /var/lib/mysql/startup.sql
Aggiungi questo a /etc/my.cnf
[mysqld]
init-file=/var/lib/mysql/startup.sql
Questo caricherà la cache ogni volta che mysql viene avviato
Provaci !!!
AGGIORNAMENTO 2011-12-30 17:25 EDT
Se desideri ottenere le dimensioni esatte per impostare la cache, utilizza la seguente query:
SELECT CONCAT('1024 * 1024 * ',ROUND(index_length/power(1024,2))) RecommendedCacheSize
FROM information_schema.tables WHERE table_name='users';
AGGIORNAMENTO 2011-12-30 23:21 EDT
Ecco un metodo basato su InnoDB
Hai ancora bisogno degli indici
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Devi assicurarti che il pool di buffer InnoDB abbia i nomi utente e le password disponibili. Potrebbe essere necessario ricorrere a una scansione completa dell'indice all'avvio di mysql:
Passaggio 1) Creare ReadUserPass.sql
echo "select username,password from users;" > /var/lib/mysql/ReadUserPass.sql
Passaggio 2) Aggiungi quello script a /etc/my.cnf
[mysqld]
init-file=/var/lib/mysql/ReadUserPass.sql
Passaggio 3) Eseguire una delle seguenti operazioni
$ service mysql restart
mysql> source /var/lib/mysql/ReadUserPass.sql
Poiché entrambe queste colonne (nome utente e password) risiedono nel username_password_ndx
, tutte le pagine dell'indice che compongono questo indice vengono ricaricate nel pool di buffer InnoDB. Ciò è necessario perché esiste la possibilità di svuotare le pagine dell'indice. Per ridurre al minimo ciò, aumentare le dimensioni del pool di buffer e riavviare mysql (una volta).