Matzze: Indizierung + Performance

Beitrag lesen

Matrix-Performance

Hallo zusammen,

habe eine Frage bzgl. der Indizierung bzw. performanten Umsetzung einer Matrix in MySQL

Beispiel:

Ich habe eine Tabelle "Personen"

  
id	name  
--------------  
1	Peter  
2	Horst  
3	Heidi  

usw.

Und ich habe eine Tabelle in der festgehalten wird, in welchem Verhältnis diese Personen zu einander stehen "verhaeltnisse"

  
p1	verhaeltnis 		p2  
------------------------------------  
1	mag			2  
2	kann nicht leiden	1	  
1	liebt			3  
2	liebt			3  
3	liebt nur		2  

usw.

Mit jedem "Scriptaufruf" wird eine gewisse Anzahl an Verhältnissen zur Weiterverarbeitung aufgerufen, d.h. z.B.

SELECT verhaeltnis FROM verhaeltnisse WHERE (p1 = 1 AND p2 = 3) OR (p1 = 2 AND p2 = 3) OR (p1 = 3 AND p2 = 1)

Mit jedem "Scriptaufruf" ändert sich einige Verhältnisse d.h. ein "UPDATE" wird auf die Tabelle angewendet.

Bei einer großen Anzahl N von Personen gibt es demnach bis zu (N^2 - N) Einträge in der Verhältnisse-Tabelle, bei 10.000 wären dies also satte 99990000 Einträge.

1. Frage: Gibt es einen anderen Weg eine solche Matrix zu erstellen, ohne dass die Tabelle so groß wird?

2. Frage: Wenn man eine solch große Tabelle benutzt, ist natürlich eine sinnvolle Indizierung zwingend. Laut Referenz soll man "abwägen" welche Spalten zur Indizierung sinnvoll wären. Klar könnte ich einfach p1 und p2 nehmen, aber: Da bei jedem Scriptaufruf sowohl ein SELECT (mag Indizes, weil es dadurch viel schneller wird) als auch ein UPDATE (mag keine Indizes, weil es jedesmal den Index neu schreiben muss) anfallen - was wäre denn nun die sinnvollste Indizierung einer solchen Matrix? Hat da jemand Erfahrungswerte oder weiss, wie man die Performance vergleicht zwischen dem, was man bei Suche durch Indexe spart und dem was man beim Updaten wieder einbüßt?

Danke und Gruß,

Matzze