Verstehen Sie Ihre Anforderungen, bevor Sie das Schema entwerfen (falls möglich).
Erfahren Sie mehr über die Daten, 1) Indizierung 2) Art des verwendeten Speichers, 3) Vendor Engine oder Funktionen; dh ... Caching, In-Memory-Funktionen 4) Datentypen 5) Größe der Tabelle 6) Häufigkeit der Abfrage 7) zugehörige Workloads, wenn die Ressource gemeinsam genutzt wird 8) Test
A) Die Anforderungen variieren. Wenn die Hardware die erwartete Arbeitslast nicht unterstützen kann, sollten Sie neu bewerten, wie die Anforderungen in der Arbeitslast bereitgestellt werden. Bezüglich der Additionsspalte zur Tabelle. Wenn die Datenbank Ansichten unterstützt, können Sie eine indizierte (?) Ansicht der spezifischen Daten mit den spezifischen benannten Spalten erstellen (im Vergleich zu '*' auswählen). Überprüfen Sie Ihre Daten und Ihr Schema regelmäßig, um sicherzustellen, dass Sie nie auf das "Garbage-In" -> "Garbage-Out" -Syndrom stoßen.
Vorausgesetzt, es gibt keine andere Lösung. Sie können Folgendes berücksichtigen. Es gibt immer mehrere Lösungen für ein Problem.
1) Indizierung: Mit select * wird ein Tabellenscan ausgeführt. Abhängig von verschiedenen Faktoren kann dies eine Festplattensuche und / oder einen Konflikt mit anderen Abfragen beinhalten. Wenn die Tabelle für mehrere Zwecke bestimmt ist, stellen Sie sicher, dass alle Abfragen performant sind, und führen Sie sie unterhalb Ihrer Zielzeiten aus. Wenn eine große Datenmenge vorhanden ist und Ihr Netzwerk oder eine andere Ressource nicht optimiert ist; Sie müssen dies berücksichtigen. Die Datenbank ist eine gemeinsam genutzte Umgebung.
2) Art der Lagerung. Dh wenn Sie SSDs, Festplatten oder Speicher verwenden. Die E / A-Zeiten und die Belastung des Systems / der CPU variieren.
3) Kann der DBA die Datenbank / Tabellen für eine höhere Leistung optimieren? Aus irgendeinem Grund haben die Teams entschieden, dass die Auswahl '*' die beste Lösung für das Problem ist. Kann die Datenbank oder Tabelle in den Speicher geladen werden? (Oder eine andere Methode ... Vielleicht wurde die Antwort so konzipiert, dass sie mit einer Verzögerung von 2-3 Sekunden reagiert? --- während eine Werbung abgespielt wird, um die Einnahmen des Unternehmens zu erzielen ...)
4) Beginnen Sie an der Basislinie. Verstehen Sie Ihre Datentypen und wie die Ergebnisse dargestellt werden. Bei kleineren Datentypen reduziert die Anzahl der Felder die in der Ergebnismenge zurückgegebene Datenmenge. Dadurch bleiben Ressourcen für andere Systemanforderungen verfügbar. Die Systemressourcen sind normalerweise begrenzt. Arbeiten Sie immer unter diesen Grenzen, um Stabilität und vorhersehbares Verhalten zu gewährleisten.
5) Größe der Tabelle / Daten. Wählen Sie '*' ist bei winzigen Tabellen üblich. Sie passen normalerweise in den Speicher und die Reaktionszeiten sind schnell. Nochmals .... überprüfen Sie Ihre Anforderungen. Plan für Feature Creep; Planen Sie immer den aktuellen und möglichen zukünftigen Bedarf.
6) Häufigkeit der Abfragen. Beachten Sie andere Workloads im System. Wenn diese Abfrage jede Sekunde ausgelöst wird und die Tabelle winzig ist. Die Ergebnismenge kann so gestaltet werden, dass sie im Cache / Speicher bleibt. Wenn es sich bei der Abfrage jedoch um einen häufigen Stapelprozess mit Gigabyte / Terabyte Daten handelt, sollten Sie möglicherweise zusätzliche Ressourcen bereitstellen, um sicherzustellen, dass andere Workloads nicht betroffen sind.
7) Zugehörige Workloads. Verstehen Sie, wie die Ressourcen verwendet werden. Ist das Netzwerk / System / Datenbank / Tabelle / Anwendung dediziert oder gemeinsam genutzt? Wer sind die Stakeholder? Ist dies für Produktion, Entwicklung oder Qualitätssicherung? Ist dies eine vorübergehende "schnelle Lösung". Haben Sie das Szenario getestet? Sie werden überrascht sein, wie viele Probleme heute auf der aktuellen Hardware auftreten können. (Ja, die Leistung ist schnell ... aber das Design / die Leistung ist immer noch beeinträchtigt.) Muss das System 10.000 Abfragen pro Sekunde gegenüber 5-10 Abfragen pro Sekunde ausführen? Ist der Datenbankserver dediziert oder führen andere Anwendungen die Überwachung für die gemeinsam genutzte Ressource aus? Einige Anwendungen / Sprachen; O / S verbrauchen 100% des Speichers und verursachen verschiedene Symptome / Probleme.
8) Test: Testen Sie Ihre Theorien und verstehen Sie so viel wie möglich. Ihr ausgewähltes '*' Problem kann eine große Sache sein, oder Sie müssen sich nicht einmal darum kümmern.
SELECT COUNT(*)
schlecht zu sein ist unglaublich alt und veraltet . Für Informationen überSELECT *
- siehe: stackoverflow.com/questions/1960036/…