SQL: Datenbankabfragen beschleunigen

Tabellen aufteilen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Manchmal müssen Sie Tabellen aufteilen, falls beispielsweise bestimmte Daten nicht für alle Benutzer zugänglich sein dürfen oder nur teilweise ausgefüllt wurden.

Transkript

Normalerweise sind alle Daten in dieser Tabelle enthalten. Ich habe also hier, so zu sagen, die volle Breite, auch wenn es nicht besonders breit ist. Hier die Texte und da die Zusatzinformationen. Es kann allerdings durchaus gute Gründe geben, dass diese Zusatzinformationen nicht Teil der Tabelle sind. Der eine Grund wäre, dass nicht in jeder Zeile Informationen gebraucht werden. Beispielsweise könnte es sein, dass einige der Personen hier sagen wir einmal, Dozenten sind und die anderen Mitarbeiter. Und nur für die Dozenten müssen Sie wissen welche Qualifikationen sie haben, oder wie sie erreichbar sind. Alle zusammen bilden aber die Liste aller Personen. Dann wäre es schlau, einen Teil der Daten auszulagern in eine zweite Tabelle, sodass nicht 99 % der Inhalte leer wären. Ein anderer Anlass wäre, wenn Sie sagen, diese Informationen, nennen wir das vielleicht einmal Gehaltsangaben, sind so zu trennen, dass sie nicht von von jedem zu lesen sind, aus Datenschutzgründen. Es gibt also Anlässe, diese Tabelle zu trennen. Ich habe die jetzt entsprechend einmal als Teil A bezeichnet. Das heißt, hier steht nur der Text der Namen drin. Und im Teil B, auch wenn diese Tabelle jetzt gleich lang ist, das sind hier genau 275.000 Datensätze, sthen die übrigen Informationen. Die könnte ich also mit Zugriffsrechten so steuern, dass nicht jeder die sehen kann. Und die werden dann verknüpft über eine 1:1-Beziehung. Das kann natürlich problematisch sein. Da gibt es verschiedene Varianten. Wenn ich noch einmal kurz das Formular angucke. Wenn ich hier also zählen will, völlig beispielhaft, wie oft mein Vorname vorkommt, in der Gesamttabelle Viele Daten, dann würde ich das so ausführen und kriege eine Zeitmessung für die Gesamttabelle. Jetzt probiere ich das Gleiche nur für den Teil A. Das ist der, der dort nur die Texte, nur die Namen enthält, und messe das dann entsprechend. Dann gibt es noch verschiedene andere Varianten. Ich kann überlegen, wie ist das mit der Geschwindigkeit, wenn ich die zweite schon über einen Inner-Joint verbunden habe, weil ich aus anderen Gründen dort was nachgucken muss, ob das dann schneller ist. Oder ich nehme nicht ein konkretes Feld. Sie sehen, hier steht ein konkreter Feldname drin. Sondern bei Count kann ich mit dem Sternchen (*) arbeiten, was im Normalfall bedeutend schneller ist. Ob das vielleicht einen Unterschied macht. Und damit es überhaupt, so zu sagen, ein bisschen weh tut, ist hier auf den Tabellen gar kein Index drauf. Und Sie können auch davon ausgehen, je größer die Tabellen werden, desto mehr wird der Effekt auftreten. Also vielleicht probieren wir zuerst einmal, wenn Sie mit Count direkt auf einen Feldnamen zugreifen, das ist so zu sagen der schlechteste Fall, einmal auf die komplette Tabelle mit allen Text- und Zahlenfeldern und einmal nur auf den linken Teil, die Tabelle A mit dem wesentlichen, nämlich den Textfeldern, die ich da zählen möchte. Und die Variante für alle Felder braucht 93 ms, wie gesagt ohne Index, damit man überhaupt Unterschiede messen kann. Und wenn ich die Tabelle A mit dem kleineren Teil nehme, dann geht es ein bisschen schneller - 84 %. Das gibt zwar schon einen grünen Pfeil. Aber ich will ehrlich sein, der ist wirklich knapp unter den den 90%, von denen ich behaupte, dass es überhaupt keine Änderung ist. Also es gibt eine kleine Änderung und vermutlich, das müsste man noch einmal in Ruhe mit viel mehr Spalten messen, ist der Effekt deutlicher, wenn Sie mehr Spalten haben. Aber sobald Sie einen Index drauf haben, werden Sie vermutlich gar keinen Unterschied mehr feststellen. Das ist eigentlich ähnlich, wenn Sie dasselbe probieren. Einmal mit der normalen Tabelle mit allen Feldern und dann die beiden getrennten Tabellen wieder über eine 1:1-Beziehung in einer Abfrage zusammengefügt. Und dann gemessen, wie viele Datensätze diese Kriterien erfüllen. Eine Tabelle braucht 78 ms. Die zwei Tabellen mit der Verknüpfung 93 ms. Ja, das ist eine Verschlechterung auf 119 %. Aber erstens, nicht wirklich der Rede wert und zweitens, wie gesagt, ohne Index. Da muss ich noch einmal ganz deutlich sagen, mit einem Index holt man so viel raus, dass das hier locker zu verschmerzen ist. Und der eigentliche Grund der Tabellentrennung ist ein sachlicher, nicht ein Geschwindigkeits-Grund. Sondern Sie müssen die Daten trennen, weil Teile gar keine Inhalte haben, oder weil sie von bestimmten Benutzern nicht geöffnet werden dürfen. Da stellt sich eigentlich nur die Frage, wird es in der Geschwindigkeit so viel schlimmer, dass ich drüber nachdenken muss? Oder, wie Sie hier sehen, es ist eigentlich nicht wirklich der Rede wert. Und auch wenn Sie die schnellere Count-Version benutzen, also nicht einen Feld Namen, sondern nach Sternchen (*) suchen, dann ist der Unterschied kaum der Rede wert. Sie haben die Gesamttabelle mit allen Daten in 78 ms. Und die verknüpfte Version in 94 ms. Das ist im Grunde wie eben 121 % Verschlechterung. Ich sage es gerne noch einmal, ein Index würde das so gravierend verbessern, dass es kein ernsthaftes Argument gegen eine Tabellentrennung sein kann.

SQL: Datenbankabfragen beschleunigen

Entdecken Sie, wo das Beschleunigungspotenzial für SQL-Datenbanken liegt und lernen Sie die Rezepte für bessere Performance.

2 Std. 15 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.03.2015

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!