MySQL - Non-Clustered Index

Hallo zusammen, zukünftige Datenbank-Zauberer! Heute machen wir uns auf eine aufregende Reise in die Welt der MySQL Non-Clustered Indizes. Keine Sorge, wenn ihr neu seid – ich werde dein freundlicher Guide sein, und wir werden dieses Thema Schritt für Schritt erkunden. Also, holt euch eine Tasse Kaffee (oder Tee, wenn das mehr euer Ding ist) und tauchen wir ein!

MySQL - Non-Clustered Index

Was ist ein Non-Clustered Index?

Bevor wir ins Detail gehen, lassen Sie uns mit den Grundlagen beginnen. Stellt euch vor, ihr seid in einer Bibliothek (deutet ihr euch noch an diese?). Die Bücher sind auf Regalen in alphabetischer Reihenfolge nach dem Nachnamen des Autors aufgestellt. Das ist ähnlich, wie Daten in einer Datenbanktabelle gespeichert werden. Was wäre, wenn ihr alle Bücher eines bestimmten Genres finden wollt? Ihr müsst durch jedes einzelne Buch gehen – das ist zeitaufwendig!

Genau hier kommt ein Non-Clustered Index ins Spiel. Es ist wie das Erstellen einer separaten Liste, die Bücher nach Genre organisiert, wobei jeder Eintrag auf die Lage des Buches im Regal verweist. In Datenbankbegriffen ist ein Non-Clustered Index eine separate Struktur, die eine Kopie ausgewählter Spalten aus einer Tabelle enthält, zusammen mit einem Zeiger auf die vollständige Zeile in der Haupttabelle.

Hauptmerkmale von Non-Clustered Indizes:

  1. Sie sind von den Haupttabellendaten getrennt.
  2. Sie können auf einer oder mehreren Spalten erstellt werden.
  3. Mehrere Non-Clustered Indizes können auf einer einzigen Tabelle existieren.
  4. Sie verbessern die Abfragleistung für spezifische Suchbedingungen.

MySQL Non-Clustered Indizes

In MySQL erstellt ihr einen Non-Clustered Index, wenn ihr einen Index erstellt, ohne ihn als UNIQUE oder PRIMARY KEY zu kennzeichnen. Sehen wir uns an, wie man einen erstellt:

CREATE INDEX idx_lastname ON customers (last_name);

Dieser Befehl erstellt einen Non-Clustered Index namens idx_lastname auf der last_name-Spalte der customers-Tabelle. Jetzt kann MySQL viel schneller Ergebnisse finden, wenn ihr nach Kunden nach ihrem Nachnamen sucht.

Wann sollte man Non-Clustered Indizes verwenden?

Non-Clustered Indizes sind großartig für:

  1. Spalten, die häufig in WHERE-Klauseln verwendet werden
  2. Spalten, die in JOIN-Bedingungen verwendet werden
  3. Spalten, die in ORDER BY oder GROUP BY Klauseln verwendet werden

Denkt aber an das goldene Regel der Indizierung: "Mit großer Macht kommt große Verantwortung." Zu viele Indizes können INSERT-, UPDATE- und DELETE-Operationen verlangsamen, da jeder Index zusammen mit der Tabelle aktualisiert werden muss.

Erstellen eines Non-Clustered Index mit NodeJS

Nun, lassen Sie uns mit ein bisschen Code herum experimentieren! Wir verwenden Node.js, um einen Non-Clustered Index in MySQL zu erstellen. Zuerst stellt sicher, dass ihr Node.js installiert habt und das mysql2-Paket zu eurem Projekt hinzugefügt habt.

const mysql = require('mysql2/promise');

async function createNonClusteredIndex() {
try {
// Eine Verbindung zur Datenbank erstellen
const connection = await mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
});

console.log('Verbindung zur MySQL-Datenbank hergestellt');

// SQL zum Erstellen eines Non-Clustered Index
const sql = `CREATE INDEX idx_email ON users (email)`;

// Den SQL-Befehl ausführen
const [result] = await connection.execute(sql);

console.log('Non-Clustered Index erfolgreich erstellt');

// Die Verbindung schließen
await connection.end();
} catch (error) {
console.error('Fehler:', error.message);
}
}

createNonClusteredIndex();

Lassen Sie uns diesen Code analysieren:

  1. Wir importieren das mysql2/promise-Modul, um MySQL mit async/await zu verwenden.
  2. Wir definieren eine asynchrone Funktion createNonClusteredIndex().
  3. Innerhalb der Funktion erstellen wir eine Verbindung zu unserer MySQL-Datenbank.
  4. Wir definieren unseren SQL-Befehl, um einen Non-Clustered Index auf der email-Spalte der users-Tabelle zu erstellen.
  5. Wir führen den SQL-Befehl mit connection.execute() aus.
  6. Schließlich schließen wir die Verbindung.

Wenn ihr dieses Skript ausführt, erstellt es einen Non-Clustered Index auf der email-Spalte der users-Tabelle. Dieser Index wird Abfragen beschleunigen, die nach Benutzern per E-Mail-Adresse suchen.

Praktisches Beispiel: Verwenden des Non-Clustered Index

Nun, da wir unseren Index erstellt haben, sehen wir, wie er die Abfragleistung verbessert. Betrachten wir dieses Szenario:

async function findUserByEmail(email) {
const connection = await mysql.createConnection({
// Verbindungsdaten...
});

const [rows] = await connection.execute(
'SELECT * FROM users WHERE email = ?',
[email]
);

await connection.end();

return rows[0];
}

Diese Funktion sucht einen Benutzer nach seiner E-Mail-Adresse. Mit unserem neuen Index auf der email-Spalte kann MySQL die richtige Zeile viel schneller finden, ohne die gesamte Tabelle durchsuchen zu müssen. Es ist wie ein super-effizienter Bibliothekar, der jedes Buch, das du fragst, sofort finden kann!

Schlussfolgerung

Und da habt ihr es, Leute! Wir sind durch die Welt der MySQL Non-Clustered Indizes gereist, von der Verständigung, was sie sind, bis hin zur Erstellung und Verwendung mit Node.js. Denkt daran, Indizes sind mächtige Werkzeuge, aber verwendet sie weise. Zu viele Indizes können eure schnelle Datenbank in ein träges Monster verwandeln.

Während ihr eure Datenbankabenteuer fortsetzt, experimentiert weiter mit Indizes. Versucht, sie auf verschiedenen Spalten zu erstellen, misst die Abfragleistung vor und nach der Erstellung und seht das Magische geschehen. Und immer daran denken: In der Welt der Datenbanken ist Effizienz König!

Nun, geht voran und indiziert verantwortungsvoll! Frohes Coden!

Credits: Image by storyset