0

Ich habe eine Tabelle mit dem Namen [CwbOrder], die derzeit 1.277.469 Zeilen hat. Ich verwende SQL Server 2014 und mache diese Tests in einer UAT-Umgebung. Bei der Produktion dauert diese Abfrage ein wenig länger.Einfache Auswahl aus Tabelle dauert 24 Sekunden in SQL Server 2014

Wenn ich versuche, alle Zeilen der Auswahl wie mit:

SELECT * FROM cwbOrder

Es dauert 24 Sekunden alle Daten aus der Tabelle abzurufen. Ich habe gelesen, dass es wichtig ist, Spalten in den Prädikaten (WHERE) zu indizieren, aber ich kann immer noch nicht verstehen, wie eine einfache Auswahl 24 Sekunden dauert.

enter image description here

diese Tabelle Verwendung in anderen komplexere Abfragen generiert eine Menge zusätzlichen Arbeitsaufwand für die Abfrage, obwohl ich die auf indizierten Spalten JOIN erstellt habe. Zusätzlich habe ich nur 2 Spalten aus dieser Tabelle ausgewählt und dann zu einer anderen Tabelle VERBUNDEN, und diese Operation dauert noch immer sehr lange. Als Beispiel betrachten bitte die unten stehende Abfrage:

enter image description here

Im Folgenden werde ich die Indexstruktur beider Tabellen angeschlossen haben, um die Angelegenheit zu veranschaulichen:

enter image description here

PK_cwbOrder ist der Index für die id_cwbOrder Spalte in der Tabelle cwbOrder.

enter image description here

Edit 1: Ich habe den Ausführungsplan für die Abfrage, in der ich die cwbOrder Tabelle mit der cwbAction Join-Tabelle hinzugefügt.

enter image description here

Gibt es eine Möglichkeit, die Informationen über bedenkt, dass ich diese Abfrage schneller machen?

+0

Was ist die Zeilenanzahl in der Aktionstabelle. Wie viele Auftrags-IDs gibt es in der Auftragstabelle? Wie ist die Beziehung zwischen den beiden Tabellen?Wenn die Selektivität nicht so niedrig ist, würde der Optimierer nur vollständige Scans durchführen. –

+0

@AbBennett - überprüfen Sie den Beitrag erneut, ich habe den Ausführungsplan für die zweite Abfrage hinzugefügt. Auch versuchte Vorschläge, eine begrenzte Anzahl von Zeilen (10 Zeilen) zu wählen und die Zeilen der Tabelle cwbOrder zu zählen, aber keine schlüssigen Informationen erhalten. –

+1

_Displaying_ diese 1277469 Zeilen werden bereits eine erhebliche Menge an Zeit in Anspruch nehmen. –

Antwort

0

Es gibt viele Gründe, warum eine solche select langsam sein könnte:

  • Die Zeilengröße oder Anzahl der Zeilen sehr groß sein könnte, viel Zeit erfordert, zu transportieren oder zu verzögern.
  • Andere Vorgänge auf dem Tisch können Sperren auf dem Tisch haben.
  • Der Datenbankserver oder das Netzwerk könnte sehr ausgelastet sein.
  • Die "Tabelle" könnte wirklich eine Ansicht sein, die eine komplizierte Abfrage ausführt.

Sie können verschiedene Aspekte testen. Zum Beispiel:

SELECT TOP 10 <one column here> 
FROM cwbOrder o 

Dies gibt eine sehr kleine Ergebnismenge und liest nur einen kleinen Teil der Tabelle. Dies liest die gesamte Tabelle, aber eine kleine Ergebnismenge zurück:

SELECT COUNT(*) 
FROM cwbOrder o 
+0

Ich habe beide Aspekte getestet und 'SELECT TOP 10 FROM cwbOrder o', (ich habe order_externalId verwendet) läuft in 0 Sekunden, also 'SELECT COUNT (*) FROM cwbOrder o', 1 Zeile zurück mit der Gesamtzahl der Datensätze 1.277.469. Gibt es eine Möglichkeit, dass ich diese Abfrage schneller ausführen kann (Die einfache Auswahl)? –

+0

@RaduN. . . . Dies würde entweder eine Aktivität auf dem Server nahelegen oder möglicherweise, dass 'cwbOrder' einige sehr große Spalten hat. Wenn letzteres der Fall ist, versuchen Sie, nur eine oder zwei Spalten anstelle von 'select *' auszuwählen. –

+0

Ich versuchte 'SELECT , VON cwbOrder' und es kehrte 1.277.469 in 8 Sekunden zurück. Gibt es bestimmte Indikatoren, die ich für Aktivitäten auf dem Server überwachen sollte? Kennen/empfehlen Sie spezifische KPIs, die ich auf Auswirkungen auf die Abfrageaktivität überwachen kann? –