2016-04-05 23 views
-1

Ich habe eine sehr große Datenbank, 3k + Reihenbeschleunigen MsSQL Abfrage

Es dauert 4 ganze Sekunden, um die Seite zu laden, mit 2 großen querys Wie es zu beschleunigen?

Erstens:

SELECT Description 
FROM ComputerIdentity JOIN 
    MakeModelIdentity 
    ON ComputerIdentity.MakeModelID = MakeModelIdentity.ID 
WHERE MakeModelIdentity.DeviceName='Laptop' AND 
     ComputerIdentity.Description LIKE '%uitleen%' AND 
     MakeModelIdentity.DeviceName = 'Laptop' AND 
     MakeModelIdentity.Model = 'Chromebook' 
ORDER BY ComputerIdentity.ID ASC 

Zweitens:

SELECT Inlognaam,VolledigeNaam FROM PersoneelEnLeerlingen 
+5

(1) 3k Reihen ist nicht riesig hat. (2) Bestimmen Sie, welche Abfrage die meiste Zeit benötigt und konzentrieren Sie sich darauf. (3) Geben Sie Informationen darüber an, ob Ihre Tabellen Indizes enthalten. –

+0

Versuchen Sie mit EXPLAIN zu finden, welches Tabellenfeld Zeit braucht, und wenden Sie dann INDEXING auf diese Spalten an, die sich Zeit nehmen. – RJParikh

+0

Auch wenn Sie das erste '%' in 'ComputerIdentity.Description LIKE '% uitleen%' loswerden können, wäre es gut. –

Antwort

0

3K Zeilen ist winzig, SQL Server Engine benötigt keine Hilfe, um es zu optimieren. Hier noch ein paar Vorschläge aus dem Buch der Optimierung. Für Erste:

SELECT ci.Description 
FROM ComputerIdentity ci JOIN 
    MakeModelIdentity mmi 
    ON ci.MakeModelID = mmi.ID 
WHERE mmi.DeviceName = 'Laptop' AND 
     mmi.Model = 'Chromebook' AND 
     ci.Description LIKE '%uitleen%' --reordered 
ORDER BY ci.ID ASC; 
  1. Stellen Sie sicher sind Ihre IDs integer
  2. gruppierten Erstellen von Indizes auf ComputerIdentity.MakeModelID und MakeModelIdentity.ID, falls Sie können sie Primärschlüssel machen, das wäre die beste . Erstellen Sie einen nicht gruppierten Index für Beschreibung, Gerätename und Modell
  3. Wenn Sie den Operator '%' entfernen können, versuchen Sie es. "%" -Operator ist sehr teuer, was bedeutet, dass "% uitleen%" langsamer ist als "uitleen%". Wenn Sie einen ähnlichen Operator entfernen können, wäre das großartig.

Für Zweitens: Erstellen nicht gruppierten Indizes für die Spalten, die Sie auswählen, die nicht über einen gruppierten Index

+0

Ich kann den Operator% nicht entfernen, weil die Namen der Geräte ICT Uitleen *** sind - aber ich kann versuchen ICT Uitleen% – Koen

+0

Bitte tun Sie das, als Wenn es das Alphabet, mit dem die Zeichenfolge beginnt, es ausschließt alle anderen Zeichenfolgen Stellen Sie sich beispielsweise den Geschwindigkeitsgewinn vor, indem Sie Wörter suchen, die mit u beginnen, anstatt alle Wörter zu durchsuchen. –

0

Für diese Abfrage (die ich "vereinfachte" mit Tabellen-Aliase und Entfernen der redundanten WHERE Zustand haben):

SELECT ci.Description 
FROM ComputerIdentity ci JOIN 
    MakeModelIdentity mmi 
    ON ci.MakeModelID = mmi.ID 
WHERE mmi.DeviceName = 'Laptop' AND 
     ci.Description LIKE '%uitleen%' AND 
     mmi.Model = 'Chromebook' 
ORDER BY ci.ID ASC; 

Sie können die Abfrage mit den Indizes MakeModelIdentity(DeviceName, Model, ID) undbeschleunigen.

Die zweite Abfrage ist wirklich einfach und die Geschwindigkeit hängt nur von der Größe der Daten ab.

+0

können Sie mir bitte helfen zu verstehen, wie Sie die Indizes ausgewählt haben? –

Verwandte Themen