Tabellenstruktur
-
Hallo
ich hab in ner Datenbank mit Eigenschaften die zu einer ID zugeordnet sind und
diese wird relativ groß.
Ist es schneller einen Datensatz mit allen Eigenschaften in eine Spalte zu schreiben und diese dann mit Volltextsuche zu suchen (B) oder für jede Eigenschaft einen eigenen Datensatz einzufügen (A)Ich vermute das viele Datensätze insofern schlechter sind weil immer die Poition auf der Festplatte gesucht werden muss aber ich bin mir nicht sicher wie negativ sich ne Volltextsuche in nem langen Text auswirkt.
SELECT ID FROM TABLE WHERE MATCH (Eigenschaften) AGAINST ('E3');
A:
ID | Eigenschaft
------------------
1 | E1
------------------
1 | E2
------------------
1 | E3
------------------
1 | E4
------------------
1 | E5
------------------
1 | E6
------------------
1 | E7
------------------B:
ID | Eigenschaft
---------------------
1 | E1E2E3E4E5E6E7
---------------------
-
Kommt darauf an was Du suchen möchtest.
Wenn du suchen möchtest welche ID E3 hat dann
SELECT ID FROM TABLE WHERE Eigenschaft = 'E3'
Wenn du wissen möchtest welche Eigenschaft ID 1 hat
SELECT Eigenschaft WHERE ID = 1Du solltest aber normalisieren.
Also Eigenschaft in eine eigene Tabelle geben und dann einen JoinA:
ID | Eigenschaft
------------------
1 | 1
------------------
1 | 2
------------------
1 | 3
------------------
1 | 4
------------------
1 | 5
------------------
1 | 6
------------------
1 | 7
------------------B:
ID | Eigenschaft
------------------
1 | E1
------------------
2 | E2
------------------
3 | E3
------------------
4 | E4
------------------
5 | E5
------------------
6 | E6
------------------
7 | E7
------------------Eine Pauschalantwort gibt es da nicht den die Anforderungen und die weiteren Daten sind nicht bekannt.
Eine Spalte ID zu nennen ist nicht so gut solange es nicht ein Autowert Increment ist.
Jeder Datensatz muss eindeutig sein.
-
debian inside schrieb:
Hallo
ich hab in ner Datenbank mit Eigenschaften die zu einer ID zugeordnet sind und
diese wird relativ groß.
Ist es schneller einen Datensatz mit allen Eigenschaften in eine Spalte zu schreiben und diese dann mit Volltextsuche zu suchen (B) oder für jede Eigenschaft einen eigenen Datensatz einzufügen (A)
...Der Inhalt eines Feldes sollte immer "atomar" sein - Also eine einzige klare Information enthalten. Alles andere macht früher oder später Ärger. Was machst du z.B. wenn du eine Eigenschaft entfernen willst? Dann musst du erst so einen Substring/Replace o.ä. Krampf durchführen. Über die die Geschwindigkeit solltest du dir keine Sorgen machen, dafür gibt es Indizes.