Das Hinzufügen von Kriterien zum Verfahren führt zu einer schlechten Leistung

JJ32

Ich habe eine Funktion fncDeptInfo. Derzeit werden in weniger als einer Sekunde etwa 1000 Datensätze zurückgegeben:

ALTER FUNCTION [dbo].[fncDeptInfo]()
RETURNS TABLE 
AS
RETURN 
(
    SELECT 
        tblContacts.Contact, 
        CASE tblContacts.Parent1
            WHEN 1900 THEN 0 
            WHEN 1901 THEN 1
            WHEN 1902 THEN 2
            WHEN 1903 THEN 3
            WHEN 1904 THEN 4
            WHEN 1905 THEN 5
            WHEN 1906 THEN 6
            ELSE NULL 
        END AS PRArea,
        DISTRICT.Contact AS DistrictID
    FROM 
        tblContacts 
    LEFT OUTER JOIN
        tblContacts AS DISTRICT ON tblContacts.Parent2 = DISTRICT.Contact 
    WHERE    
        (tblContacts.ContactType = 'Fire') AND
        (tblContacts.SubType = 'Dept')
)

Ich habe eine Prozedur, die diese Funktion unten aufruft:

SELECT  
    fncDeptInfo.Contact, DEPTPAID.CurPaid, 
    fncDeptInfo.PRArea, fncDeptInfo.DistrictID              
FROM    
    fncDeptInfo() AS fncDeptInfo 
INNER JOIN
    (SELECT 
         v_Item.BillToContact AS Contact,
         SUM(CASE WHEN Expiration = @Date1 AND tblProgramCodes.FormatCode = 'Membership' THEN 1 ELSE 0 END) AS CurPaid
     FROM 
         v_Item 
     INNER JOIN
         tblProgramCodes ON v_Item.ProgramCodeID = tblProgramCodes.ProgramCode 
     GROUP BY 
         v_Item.BillToContact) DEPTPAID ON fncDeptInfo.Contact = DEPTPAID.Contact
WHERE 
    (fncDeptInfo.PRArea > 0) AND (fncDeptInfo.DistrictID > 0) 
ORDER BY 
    fncDeptInfo.Contact

v_Itemist eine sehr komplexe Ansicht, die Finanzaufzeichnungen über viele verschiedene Tabellen hinweg zusammenfasst. Es werden über 300.000 Zeilen zurückgegeben. Der geplante Vorgang kehrt in 5 Sekunden zurück.

Wenn ich dieses Stück hinzufüge, um die Hauptinformationen zu fncDeptInfo zu erhalten, dauert der Vorgang anderthalb Minuten. Aber fncDeptInfo alleine kehrt immer noch in ungefähr einer Sekunde zurück:

LEFT OUTER JOIN fncEmployee(GETDATE(), 'Chief') AS CHIEF 
  ON tblContacts.Contact = CHIEF.Contact2 

Wenn ich dieses Kriterium zum Verfahren hinzufüge, dauert es jetzt auch anderthalb Minuten. Wenn ich jedoch fncDeptInfo aus der Prozedur entferne, kehrt es in etwa 5 Sekunden wieder zurück:

WHERE CurPaid > 0

Ich vermute, dass die Ansicht in beiden Fällen irgendwie involviert ist und wiederholt aufgerufen wird. Kann jemand einen besseren Weg vorschlagen, dies so zu gestalten, dass die Leistung nicht leidet?

Romine

Eine einfache Option besteht darin, Ihre Ansicht in einer temporären Tabelle auszuwählen, wodurch der wiederholte Aufruf der Ansicht verhindert wird. Etwas wie

IF Object_ID ('tempdb..vitem_tmp') is not null DROP TABLE #vitem_tmp

SELECT *
INTO #vitem_tmp
FROM v_Item

[Your query, referencing #vitem_tmp instead of v_Item]

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Die Verwendung von Listen als Spalten führt zu einer schlechten Leistung - JPA

Das Hinzufügen einer Regularisierung führt zu einer langsameren und schlechteren Leistung

Wie führt das Hinzufügen von n ganzen Zahlen zu einer Zeichenfolge zum Subtrahieren der ersten n Zeichen?

Das schnelle Hinzufügen von int zum Vektor und das Löschen führt zu Zugriffsverletzungen

Warum führt das Hinzufügen von Ganzzahlen zu einer Zeichenfolge zu einer Zeichenfolge?

Führt das Hinzufügen eines Elements zu einer Liste zum Kopieren der Liste oder nicht?

Das Hinzufügen einer Where-Bedingung zum Zeitstempel führt zu ungeraden aggregierten Ergebnissen

Das Hinzufügen einer Pfeilfunktion zum Eingabefeld führt zu einem Fehler

Das Hinzufügen eines Arrays zum useEffect-Abhängigkeitsarray führt zu einer Endlosschleife

Das Hinzufügen von .removeStateDidListener zu deinit führt zum Absturz der Anwendung

Das Hinzufügen von media_ids zum Twitter-API-Aufruf führt zu Authentifizierungsproblemen

Das Hinzufügen von Elementen zu einem Stapel führt zum Absturz

Das Hinzufügen von Booleschen zu einer Liste führt zu einem TypeError

Das Hinzufügen einer Gokogiri-Abhängigkeit führt zum Beenden von "Killed: 9"

Warum führt meine Implementierung der L1-Regularisierung zu einer schlechten Leistung?

Postgres Materialise führt zu einer schlechten Leistung bei der Löschabfrage

JSON.NET ANY ContractResolver führt zu einer schlechten Leistung

Die zwischengespeicherten Kacheln von GMSMapView werden nach dem Zoomen im Speicher gehalten, was zu einer hohen Speichernutzung und einer schlechten App-Leistung führt

Warum führt das Speichern des Ergebnisses in einer Variablen mithilfe von Versprechungen zu einer besseren Leistung?

Das Hinzufügen einer Datei von der URL zum Docker-Image führt zu einem anderen Ergebnis, wenn Sie Volume verwenden

Das Hinzufügen von Daten aus der Firebase führt zu einer Endlosschleife

Das Hinzufügen der Nullprüfung führt zu einer Reihe von Kompilierungsfehlern

Warum führt das Hinzufügen von Datumsangaben zu einer Zeichenfolge?

Das Hinzufügen von 4-Byte-Werten führt zu einer Überlaufausnahme

Das Ändern von Zeichen in einer Zeichenfolge durch Hinzufügen eines Werts führt zu einem Laufzeitfehler

Das Hinzufügen einer Formel aus JavaScript zu CSV zum Importieren in Google Sheet führt zu mehreren Spalten

Das Erweitern einer Schnittstelle zum Hinzufügen einer neuen Eigenschaft führt zu "Typ X ist nicht generisch".

TypeScript Angular - Das Hinzufügen einer Zeichenfolge zu einer Zahleneigenschaft führt zu einem Wert von Null (0).

Das Hinzufügen von mehr als einer Beziehung zu einer Laravel-Factory-Methode führt zu TypeError

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv