ov3r 10 Geschrieben 20. Oktober 2008 Melden Teilen Geschrieben 20. Oktober 2008 Hallo Zusammen, ich musste meine Software von einem Sybase Server auf einen MSSQL Server umstellen. Und jetzt habe ich erschreckend festgestellt, dass der MSSQL Server für die u.g. Abfrage 1,5 Minuten braucht und der Sybase Server hat seine 6 Sekunden dafür benötigt. Der Aufbau des SQL's ist wie folgt: SELECT funktion1(tabelle1.spalte1), funktion1(tabelle2.spalte2), funktion2(tabelle1.spalte3), funktion2(tabelle2.spalte4), funktion3(tabelle3.spalte5), funktion3(tabelle3.spalte6) FROM tabelle11 LEFT JOIN tabelle2 ON tabelle1.spalte1 = tabelle2.spalte1 LEFT JOIN tabelle3 ON tabelle2.spalte1 = tabelle3.spalte1 LEFT JOIN tabelle4 ON tabelle3.spalte1 = tabelle4.spalte1 LEFT JOIN tabelle5 ON tabelle4.spalte1 = tabelle5.spalte1 LEFT JOIN tabelle6 ON tabelle5.spalte1 = tabelle6.spalte1 WHERE tabelle6.spalte1 = 'wert' Meine Vermutung ist das der MSSQL Server zuerst alle Datensätze sammelt, anschließend die Funktionen über alle Datensätze jagt und dann erst nach der WHERE Bedingung filtert. Gibt es dort einen Trick oder ein besseres Vorgehen? Vielen Dank im Voraus Mit freundlichen Grüßen Jorg Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 20. Oktober 2008 Melden Teilen Geschrieben 20. Oktober 2008 Zuerst würde ich prüfen, ob und welche Indizes auf den Tabellenspalten vergeben sind. Ggf. hier noch mit Indizes nachhelfen. Des Weiteren wäre es interessant zu wissen, welche Funktionen du über die Datensätze "jagst"... Sprich: was sind funktion1, funktion2 und funktion3 konkret? Wieviele Datensätze sind in den jeweiligen Tabellen enthalten? Sind die Spalten über die du joinst Primärschlüssel oder sind das "normale" Tabellenspalten? Zudem kannst du dir per CTRL+L den Execution Plan deiner Query anzeigen lassen. Dort lässt sich zum einen die "Reihenfolge" der Verarbeitung wie auch die jeweiligen Kosten der Querybestandteile erkennen. Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 20. Oktober 2008 Melden Teilen Geschrieben 20. Oktober 2008 Moin, ich vermute genau wie Carsten, das das Problem in fehlenden Indizes begründet liegt. Bei dem beschriebenen Verhalten ist das nahe liegend. Schau doch mal, welche Indizes auf dem Sybase-System gesetzt sind, das ist ein erster Anhaltspunkt. Gruß, Nils Zitieren Link zu diesem Kommentar
ov3r 10 Geschrieben 20. Oktober 2008 Autor Melden Teilen Geschrieben 20. Oktober 2008 Vielen Dank für die schnelle Antwort. Hmm also ich habe die Indizes genau so aus der Sybase Datenbank eingesetzt. Die Joins sind alle über PK erstellt. Die Funktionen holen aus verschiedenen Tabellen Werte, die anschließend zurück gegeben werden. Aus einer ID wird mit ein paar Parametern ein Text. Nachdem ich mal den Datenbanktraffic auf dem MSSQL Server mitgeschnitten habe, hat man an der Datei gesehen, dass der MSSQL alle Funktionen zu jedem Ergebnis ausgeführt hat und nicht erst nach der Where Klausel. Daher auch meine Frage ob man am SQL Server etwas einstellen kann. Damit er die Funktionen erst nach der Ergebnismenge ausführt.? Vielen Dank Gruß Jorg Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 20. Oktober 2008 Melden Teilen Geschrieben 20. Oktober 2008 Moin, befolge Carstens Hinweis mit dem Query Plan. Der ist zum Aufspüren solcher Dinge ein gutes Werkzeug. Gruß, Nils Zitieren Link zu diesem Kommentar
ov3r 10 Geschrieben 21. Oktober 2008 Autor Melden Teilen Geschrieben 21. Oktober 2008 Moin Moin Nils, Danke für deine Antwort. ich werde es mal mit dem Query Plan versuchen. Aber ich habe das Problem ja schon, mir fehlt ja nur die Lösung :). Es ist Eindeutig, das der MSSQL Server die Funktionen zu dem Ganzen Ergebnis der Joins ausführt. Und anschließend erst nach der WHERE Klausel filtert. Im Sybase ist es so, dass er erst die Joins ohne Funktionen ausführt, dann nach der WHERE Klausel filtert und dann auf das Ergebnis die Funktionen anwendet. Gibt es für das beschriebene Verhalten eine Erklärung oder ist es nun mal so gegeben? Gruß Jorg Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 21. Oktober 2008 Melden Teilen Geschrieben 21. Oktober 2008 Hmm also ich habe die Indizes genau so aus der Sybase Datenbank eingesetzt. Öhm, mal pauschal gefragt: Was für ein Index liegt den auf den PK-Spalten? Clustered? Non-Clustered? Was für Indizes hast du sonst noch auf den Tabellen übernommen? Da ich keinerlei Erfahrungen mit Sybase habe, stellt sich mir echt die Frage, was dort für Indizes sinnvoll sind. Das müssten wir ggf. mal gegen die jetzige SQL-DB halten und vergleichen. Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 21. Oktober 2008 Melden Teilen Geschrieben 21. Oktober 2008 Moin, ich tippe auch darauf, dass die Indizes nicht optimal sind. Führe mal den Index-Optimierungsassistenten aus, der dürfte da eine gute Hilfe sein. Gruß, Nils Zitieren Link zu diesem Kommentar
ov3r 10 Geschrieben 21. Oktober 2008 Autor Melden Teilen Geschrieben 21. Oktober 2008 Moin Moin, Danke danke für die Tipps mit den Indizes. Aber genau das habe ich auch am Anfang gedacht. Ich habe diesen Datenbank Mitschnitt in den Optimierungsassistenten geladen und dieser hat mir nur noch zusätzliche Kataloge vorgeschlagen. Nachdem ich dann seinem Rat befolgt habe, waren es anstatt 1:32 nur noch 1:27. Aber im Sybase dauert die gleiche Query, bei gleichen Datensätzen 6 - 8 Sekunden. Ach es handelt sich um mehr als 50 000 Datensätze in einer Tabelle. Durch die Joins wird die Query so etwas von den 300 000 bis 500 000 Datensätzen haben. Und wenn der MSSQL Server auf die Anzahl der Datensätze die Funktionen ausführt, ist es klar wieso es so lange dauert. :) Es ist leider nicht ganz so einfach das Problem zu beschreiben... Danke für die Antworten nochmals PS: Die Indizes sind alle Clustered... Gruß Jorg Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 21. Oktober 2008 Melden Teilen Geschrieben 21. Oktober 2008 Moin, ich bin leider nicht genug Query- und Index-Experte, um mehr dazu sagen zu können. Schätze, da sind wir in diesem Forum etwas überfragt. Gib doch mal auf folgendem Blog eine Kontaktanfrage ein, vielleicht antwortet Steffen ja und hat eine Idee bzw. kann einen Kontakt vermitteln. Steffen ber SQL, SharePoint und HPC Gruß, Nils Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 21. Oktober 2008 Melden Teilen Geschrieben 21. Oktober 2008 Leider muss ich mich an der Stelle Nils anschließen. Ohne genau Kenntniss des DB-Schemas, der verwendeten Datentypen und der jeweiligen Indizes sind mir an der Stelle auch ein wenig die Hände gebunden. Des Weiteren fehlt mir die Erfahrung mit Sybase, um das notwendige Hintergrundwissen über Fallstricke bei der Umstellung mitzubringen. Sorry... Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.