Performance sql statment frage

DaSuckOOr

Mitglied
Mysql Performance sql statment frage

Hi,

habe mal ne Frage, was in einer mysql datenbank schneller geht. Ich möchte alle user in "München" abfragen.

users
idnameuser_serviceareadid
1hans1

servicearea
serviceareadidname
1München
2Frankfurt


user_servicearea
useridserviceareaid
11
12

und dann die abfrage mit select * from user inner join user_servicearead..... where name='München'?

oder das ganze in einer Tabelle folgendermaßen

users
idnameservicearea
1hans{"München","Frankfurt"}

hier spart man sich die joins und könnte die spalte servicearea via volltext abfragen?

kann man grundsätzlich sagen welche von beiden Methoden schneller ist? Speziell bei großen datenmegen? (achtung, alles pseudocode)

Danke!

Gruß
 
Zuletzt bearbeitet:
Hi SaSuckOOr,

würde das ganze so umsetzen:

users
idname
1hans

servicearea
idname
1München
2Frankfurt


user_servicearea
user (FK -> users.id)area (FK -> servicearea.id)
11
12

Behalte die Normalformen im Auge, arbeite ruhig mit Joins. Von dem Volltext würd ich abraten, die Spalten sollten schon atomar sein. Ein Problem dabei wären dann zum Beispiel Abfragen auf User, die in München und Frankfurt sind:

hans: {"München","Frankfurt", "Ulm"}
sepp: {"Dresden","Frankfurt", "München"}
Abfrage:
SQL:
LIKE '%München%Frankfurt%' -- treffer 'hans', aber nicht 'sepp'!

Das heißt du müsstest immer n! LIKE Bedingungen haben, wobei n die Anzahl der Städte ist.

SQL:
WHERE spalte LIKE '%München%Frankfurt%'
OR spalte LIKE '%Frankfurt%München%'

Grüße,
BK
 
Zuletzt bearbeitet:
Definitv Variante 1 wie auch Bratkartoffel geschrieben hat.
RDBMS sind sehr performant was Join Operationen anbelangt. Und mit Indizes kann das ganze bei Bedarf auch noch weiter beschleunigt werden.
Und glaube mir, du willst nicht zusammengefasste Informationen innerhalb einer Zelle haben. Früher oder später bereitet dir das Probleme. Halte dich an die 3 Normalform (es gibt nur wenige Ausnahmen, wie ein DWH, wo man sich nicht daran halten sollte/kann).
 

Neue Beiträge

Zurück