En mi humilde opinión, no es necesario dividirlo físicamente. Sin embargo, sería bueno almacenarlo en caché.
Si la users
tabla usa el motor de almacenamiento MyISAM, tiene una buena ventaja.
Dado que MyISAM solo almacena en caché los índices, puede hacer dos cosas
- Puede crear un caché de claves personalizado solo para cargar el índice MyISAM
users
solo para la tabla
- Puede indexar el nombre de usuario y la contraseña para forzar que la consulta golpee solo esa caché de claves personalizada
Asegúrese de que existan los siguientes índices para users
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Hay dos (2) razones principales para los dos índices
MOTIVO del índice n. ° 1
El índice username_ndx
evita que un nombre de usuario tenga múltiples contraseñas, así como también evita que varios usuarios con el mismo nombre
MOTIVO del índice n. ° 2
El índice username_password_ndx
proporciona un índice de cobertura . Por lo tanto, su consulta buscará el nombre de usuario y la contraseña solo en el caché MyISAM personalizado, en lugar de verificar la tabla.
Más enlaces sobre los principios de los índices de cobertura
Lo siguiente es crear esa caché de claves personalizada. Estos son los comandos para crear un caché de claves de 8 MB y cargar ese caché de claves dedicado (Ejemplo: si la tabla es 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;
Debe colocar estas tres líneas en el archivo /var/lib/mysql/startup.sql
Agregue esto a /etc/my.cnf
[mysqld]
init-file=/var/lib/mysql/startup.sql
Esto cargará el caché cada vez que se inicia mysql
Darle una oportunidad !!!
ACTUALIZACIÓN 2011-12-30 17:25 EDT
Si desea obtener el tamaño exacto para configurar el caché, use la siguiente consulta:
SELECT CONCAT('1024 * 1024 * ',ROUND(index_length/power(1024,2))) RecommendedCacheSize
FROM information_schema.tables WHERE table_name='users';
ACTUALIZACIÓN 2011-12-30 23:21 EDT
Aquí hay un método basado en InnoDB
Aún necesitas los índices
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Debe asegurarse de que el InnoDB Buffer Pool tenga los nombres de usuario y las contraseñas disponibles. Es posible que tenga que recurrir a hacer un análisis de índice completo al iniciar mysql:
Paso 1) Crear ReadUserPass.sql
echo "select username,password from users;" > /var/lib/mysql/ReadUserPass.sql
Paso 2) Agregue ese script a /etc/my.cnf
[mysqld]
init-file=/var/lib/mysql/ReadUserPass.sql
Paso 3) Realice uno de los siguientes
$ service mysql restart
mysql> source /var/lib/mysql/ReadUserPass.sql
Debido a que ambas columnas (nombre de usuario y contraseña) residen en username_password_ndx
, todas las páginas de índice que componen este índice se vuelven a cargar en el InnoDB Buffer Pool. Esto es necesario porque existe la posibilidad de que las páginas de índice se eliminen. Para minimizar que eso suceda, aumente el tamaño de la agrupación de almacenamiento intermedio y reinicie mysql (una vez).