none
Performance frage einer Datenbank RRS feed

  • Frage

  • Hallo bin wieder mal anwesend.

    Mein Szenario:
    Ich habe eine Stammtabelle in der DataBase.
    Es kommen Täglich 200 Datensätze hinzu.
    Es Gibt eine Details Tabelle die pro Datensatz der ersten Tabelle maximal 12 Datensätze hat.

    Jetz kommt dieses welches wo meine kollegen und vorgesetzten mir auch keine antwort eben konnten.
    Wenn ich nur zu jedem 10. Datensatz in der Stammtabelle 2 zusätzliche werte brauch.
    Was wäre besser? in der Stammtabelle die 2 Columns einfügen oder einen neuen Tabelle mit einem verweis auf die StammTabelle.
    Wie ist dies Performace technisch zu betrachten.

    freue mich schon auf eine schöne antwort, da meine kollegen sich verprügeln wegen der Meinungen

    (Zitate: Es ist komplett egal das berührt die DB nicht, Das lesen eines Tables dauert länger als einen indecer zu suchen, ....)

    LG

    Loki

    Dienstag, 4. Oktober 2016 13:33

Antworten

  • Hallo Loki,

    haben die Deine Kollen nichts besseres zu tun? ;))

    Bei der Größe ist eine "Performance technische Betrachtung" unnötig, eine relationale[1] den Umständen nach eher.

    Wenn Du die zusätzlichen Spalten mit Nullwerten erlaubt definierst, so benötigen sie "nur" [200 * 365 / 10 * 2 * Datengröße] (für 2 Integer => 58400 Bytes) zusätzlichen Platz, was vernachlässigbar ist; denn Nullwerte werden über eine Null-Bitmap[2] geregelt.

    Eine zusätzliche Tabelle benötigt, wegen der zusätzlichen Schlüssels / Indizes mehr Platz. Sinn kann sie dann machen, wenn die Spalten unabhängig zur Haupttabelle verknüpft werden.

    Gruß Elmar

    [1] 4/5 NF  ist nicht gemeint ;))

    [2] A SQL Server DBA myth a day: (6/30) three null bitmap myths

    Dienstag, 4. Oktober 2016 14:42

Alle Antworten

  • Hallo Loki,

    haben die Deine Kollen nichts besseres zu tun? ;))

    Bei der Größe ist eine "Performance technische Betrachtung" unnötig, eine relationale[1] den Umständen nach eher.

    Wenn Du die zusätzlichen Spalten mit Nullwerten erlaubt definierst, so benötigen sie "nur" [200 * 365 / 10 * 2 * Datengröße] (für 2 Integer => 58400 Bytes) zusätzlichen Platz, was vernachlässigbar ist; denn Nullwerte werden über eine Null-Bitmap[2] geregelt.

    Eine zusätzliche Tabelle benötigt, wegen der zusätzlichen Schlüssels / Indizes mehr Platz. Sinn kann sie dann machen, wenn die Spalten unabhängig zur Haupttabelle verknüpft werden.

    Gruß Elmar

    [1] 4/5 NF  ist nicht gemeint ;))

    [2] A SQL Server DBA myth a day: (6/30) three null bitmap myths

    Dienstag, 4. Oktober 2016 14:42
  • Hi,

    wie Elmar schon schrieb: Eine Betrachtung der Performance halte ich hier auch für nebensächlich.

    Da ich Entwickler bin, habe ich immer einen etwas objektorientierten Blick auf so Dinge. Wo gehören denn diese Werte hin? Was speicherst Du in der Stammtabelle und was sind das für zwei Werte, die dazu kommen?

    Wenn Du da klare Abgrenzungen hast (und diese Werte auch zusammen gehören und entsprechend benannt werden können), dann kannst Du eine separate Tabelle dafür nehmen. Aber wenn die Werte nicht zusammen gehören, dann macht es auch keinen Sinn, dies in einer separaten Tabelle zusammen zu halten.

    Also als Beispiel nehmen wir einfach einmal eine Tabelle Auto. Nun willst du zu manchen Autos die Haarfarbe des Besitzers speichern. Da sieht man ja sofort ganz klar, dass [Haarfarbe Besitzer] da nicht wirklich zu der Tabelle [Auto] gehört. Das passt einfach nicht.

    Ich würde da auch ganz genau aufpassen, was es für eine Beziehung ist. Ist es wirklich eine 1:1 Beziehung? Nehmen wir einmal das Beispiel der Farbe (Damit es zum Auto passt, ist es nun die Farbe des Autos). Da kannst Du natürlich einfach ein nvarchar[200] nehmen und dich dann daran freuen, was für tolle Farben von den Benutzern eingetragen werden ("Helles Grün mit leichtem Stich ins Blau mit kleinen brauen Flecken" wird dann möglich. Aber auch "rot", "red", ....) Wird das wirklich so gewünscht? Oft ist es dann doch so, dass man hier eine 1:n Beziehung aufbaut, und die Benutzer wählen dann eine Farbe aus einem vorgegebenen Spektrum. Und wenn es dann doch etwas ausgefallenes, Neues sein soll, dann muss halt eine neue Farbe angelegt werden...

    Als Entwickler im objektorientierten Bereich sind für mich Objektgrenzen in der realen Welt wichtig und die versuche ich meist abzubilden - auch in einem Datenbankdesign.

    Das einfach einmal von meiner Seite zu dieser Thematik.

    Mit den besten Grüßen,

    Konrad

    Dienstag, 4. Oktober 2016 18:31
  • Hallo Loki,

    lass mich noch einen dritten Aspekt reinbringen. Wie oft werden diese Spalten dann später wieder abgefragt, also wie oft werden die Entwickler oder Super-User mit direktem Zugriff gezwungen sein einen Join zu codieren?

    Musst Du das ganze dann evtl. in einer View kapseln, damit es nicht zu viel wird?

    Wie schon die Vorredner gesagt haben, ist dies hier kein Thema der Performance, sondern vielmehr der nachzuvollziehenden Logik und Praktikabilität und ich würde es daher eher pragmatisch angehen.


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Mittwoch, 5. Oktober 2016 06:42
    Beantworter
  • Hallöchen

    Ich gebe euch Allen recht :D

    Um die Fragen zu Beantworten:
    1. Es handelt sich um 1:1
       Tabelle 1 (Stammdaten) Tabelle 2 (Erweiterung, Spalte ist NUMBER (3, 0))
    2. Man kann die Tabelle 2 wunderbar in Beziehung stellen zu Tabelle 1
       Programmiertechnisch ist alles irrelevant da ich ein wehnig Erfahrung habe
    3. Betrachten wir das mal auf eine Laufzeit von ca 10 Jahren.
       Wie siehts dann aus.

    Meine kollegen sind noch immer am diskutieren (schön anzusehen).

    LG
    Loki

    Mittwoch, 5. Oktober 2016 10:53
  • Rechnest Du die Zahl von Elmar mal 10, kommst Du auf 580 KB. Kein Wert, über den ich wirklich nachdenken würde.

    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Mittwoch, 5. Oktober 2016 10:58
    Beantworter
  • Ich glaube ich beende das hier und jetzt, da ich durch Verringerung der Produktivität einen Kasten "Milch" an  meinen Vorgesetzten und ein kleines fass "Freudensaft"  and meine kollegen Abdrücken muss.

    für mich wahr es sehr spannend den Diskusionen zu lauschen.

    euer Happy Loki

    PS.: wer weiter Diskutieren will macht es, und wer neue Situationen hat schreibt es.

    Mittwoch, 5. Oktober 2016 11:20