capypad
0 Tage Serie
sql / expert
Snippet

Optimierung von Verknüpfungstabellen mit zusammengesetzten Primärschlüsseln

Die Verwendung eines zusammengesetzten Primärschlüssels stellt die Eindeutigkeit in n:m-Beziehungen sicher und bietet gleichzeitig einen 'Clustering'-Effekt für Abfragen, die nach der ersten Spalte gefiltert werden. Ein Index in umgekehrter Reihenfolge optimiert Abfragen nach der zweiten Spalte.

snippet.sql
sql
1
2
3
4
5
6
7
CREATE TABLE user_permissions (
user_id INTEGER NOT NULL,
permission_id INTEGER NOT NULL,
granted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id, permission_id)
);
CREATE INDEX idx_perm_user ON user_permissions (permission_id, user_id);
Erklärung
1
PRIMARY KEY (user_id, permission_id)
Erzwingt Eindeutigkeit und erstellt automatisch einen B-Baum-Index, der mit user_id beginnt.
2
CREATE INDEX idx_perm_user ... (permission_id, user_id)
Erstellt einen Covering-Index, um schnelle Suchen von der Berechtigungsseite aus zu ermöglichen.