Ilja: Langsames SQL; Wie schneller machen?

Beitrag lesen

yo,

Zum einen eine Kundentabelle, die so aussieht: KID, Firma
Dann eine Gruppentabelle, welche so aussieht: GID, Gruppe
Und dann eine "Beziehungstabelle": BID, GID, KID

sollte der aufbau der tabelle so bleiben, sprich kommen keine weiteren attribute mehr dazu, kann man alles in einer tabelle zusammenfassen, sprich nur die beziehungstabelle. aber wie gesagt, der aufbau der tabllen sieht s aus, als wenn dort noch mehr attribute dazu kommen.

Nun gibt es eine Liste, in der die Firmen den Gruppen entsprechend anders gekennzeichnet werden. Hier greife ich auf 4 Gruppen zu.

anders gekennzeichnet müsste man genauer spezifizieren, was genau das bedeutet. außerdem muss man diese gruppen nicht unbedinkt in mysql gesondert abfragen, wenn du sowieso alle anzeigen willst, sondern kann die speziellen bei der ausgabe dann entsprechnd kennzeichnen.

Momentan mache ich es so:

SELECT * From Kundentable

Und dann bei jedem Durchlauf:

SELECt * FROM Beziehungstable WHERE KID = FirmenID And (GID = 3 or GID = 7 or GID 11 Or GID 20).

zwei lösungsvorschläge: zum einen direkt die gewüschten spaltennamen angeben und nicht mit dem * arbeiten, das sparrt zeit und bringt bessere performance. der andere tipp wurde bereits erwähnt, mach alles in einer liste ala AND GID IN (3,7,11,20). dinet der besseren übersicht. aber wie oben erwänt, die frage ist, ob du nicht sowieso alle gruppen der kunden auflisten willst und nur eben vier speziell hervorheben. dann wäre diese frage überflüssig. aber das solltest du noch mal darstellen.

Nun ist der Aufbau der Seite extrem langsam (es listet etwa 200 Firmen auf), und die Kundenanzahl wird in nächster Zeit stark ansteigen.

das muss nicht unbedinkt mit der datenbank zu tun haben, der sache solte man näher auf den grund gehen. 200 datensätze sind ehrlich gesagt gar nichts für eine datenbank wie mysql.

Wie könnte ich dies nun in ein SQL zusammenfassen, damit ich in etwa so ein Ergebnis bekomme:

das geht am besten über zwei getrennte abfragen, so wie du es gemacht hast. ein join wie vorgeschlagen würde das ergebnis so nicht hervorbringen, zummal joins in aller regel nicht gerade schnell sind.

0 stünde hier für "Nein: nicht vorhanden", und 1 eben für "Ja: vorhanden".

wenn du die datensätze ausliest, kann ja eine unbestimmte zahl an datensätzen zwischen 0 und 4 zurückgegeben werden. demzufolge würde ich erst mal alle in ein array einlesen und dann beim ausfbau der tabelle die 0 und 1 setzen, je nachdem, ob die gruppe im array vorhanden ist. unter php gibt s dan eine nützliche funktion.

Ilja