IMHO Sie müssen es nicht physisch aufteilen. Es wäre jedoch schön, es zwischenzuspeichern.
Wenn die users
Tabelle die MyISAM Storage Engine verwendet, haben Sie einen schönen Vorteil.
Da MyISAM nur Indizes zwischenspeichert, können Sie zwei Dinge tun
- Sie können einen benutzerdefinierten Schlüsselcache erstellen, um den MyISAM-Index nur für die
users
Tabelle zu laden
- Sie können den Benutzernamen und das Kennwort indizieren, um zu erzwingen, dass die Abfrage nur diesen benutzerdefinierten Schlüsselcache erreicht
Stellen Sie sicher, dass die folgenden Indizes für vorhanden sind users
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Es gibt zwei (2) Hauptgründe für die beiden Indizes
GRUND für Index # 1
Der Index username_ndx
verhindert, dass ein Benutzername mehrere Kennwörter hat, und verhindert, dass mehrere Benutzer denselben Namen haben
GRUND für Index # 2
Der Index username_password_ndx
bietet einen Deckungsindex . Daher sucht Ihre Abfrage nur den Benutzernamen und das Kennwort im benutzerdefinierten MyISAM-Cache, anstatt die Tabelle zu überprüfen.
Weitere Links zu den Grundsätzen der Indexabdeckung
Als Nächstes müssen Sie diesen benutzerdefinierten Schlüsselcache erstellen. Hier sind die Befehle zum Erstellen eines 8-MB-Schlüsselcaches und zum Laden dieses dedizierten Schlüsselcaches (Beispiel: Wenn die Tabelle vorhanden ist 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;
Sie sollten diese drei Zeilen in die Datei /var/lib/mysql/startup.sql einfügen
Fügen Sie dies zu /etc/my.cnf hinzu
[mysqld]
init-file=/var/lib/mysql/startup.sql
Dadurch wird der Cache jedes Mal geladen, wenn MySQL gestartet wird
Versuche es !!!
UPDATE 30.12.2011 17:25 EDT
Wenn Sie die genaue Größe zum Festlegen des Caches erhalten möchten, verwenden Sie die folgende Abfrage:
SELECT CONCAT('1024 * 1024 * ',ROUND(index_length/power(1024,2))) RecommendedCacheSize
FROM information_schema.tables WHERE table_name='users';
UPDATE 30.12.2011 23:21 EDT
Hier ist eine Methode, die auf InnoDB basiert
Sie benötigen noch die Indizes
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Sie müssen sicherstellen, dass im InnoDB-Pufferpool die Benutzernamen und Kennwörter verfügbar sind. Möglicherweise müssen Sie beim Start von MySQL einen vollständigen Index-Scan durchführen:
Schritt 1) Erstellen Sie ReadUserPass.sql
echo "select username,password from users;" > /var/lib/mysql/ReadUserPass.sql
Schritt 2) Fügen Sie dieses Skript zu /etc/my.cnf hinzu
[mysqld]
init-file=/var/lib/mysql/ReadUserPass.sql
Schritt 3) Führen Sie einen der folgenden Schritte aus
$ service mysql restart
mysql> source /var/lib/mysql/ReadUserPass.sql
Da sich beide Spalten (Benutzername und Kennwort) in der befinden username_password_ndx
, werden alle Indexseiten, aus denen dieser Index besteht, erneut in den InnoDB-Pufferpool geladen. Dies ist erforderlich, da die Indexseiten möglicherweise gelöscht werden. Um dies zu minimieren, erhöhen Sie die Größe des Pufferpools und starten Sie mysql neu (einmalig).