Fragensteller
Select auf eine View dauert 3,5 Std. bis zur Ergebnissausgabe

Allgemeine Diskussion
-
Hallo zusammen,
1. Frage: ich habe eine View auf eine Änderungstabelle (CDC) erstellt. Die View führt eine Funktion aus und gibt mir die Netto-Änderungen wieder (fn_get_net-changes_Änderungsinstanz). Die View sieht wie folgt aus:
USE [TEST]
GO/****** Object: View [dbo].[CDC_TEST] Script Date: 09/05/2011 09:25:56 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[CDC_TEST] ASSELECT * FROM cdc.fn_cdc_get_net_changes_dbo_TEST
(sys.fn_cdc_get_min_lsn('dbo_TEST'),sys.fn_cdc_get_max_lsn(), N'all with merge')
GOEine Select-Abfrage auf diese View dauert 3,5 Std.!!! Die Test-Tabelle hat 305000 Datensätze, allerdings hat sie auch etwa 208 Spalten! Wie kann ich die Performanz dieser View verbessern?
Ich nutze die View um in einem ETL-Tool (BusinessObjects) weitere Tabellen zu befüllen.
Übrigens: ich habe eine andere Tabelle die etwa 10 Spalten hat, aber ebenfalls sehr lange braucht um die Abfrage auszuführen. Es gibt auch andere Tabellen, wo die View sehr schnell ausgeführt wird.
2. Frage: die SELECT * der View gibt mir nicht alle Metadatenspalten zurück. Z.B. wird die „update_mask“ Spalte nicht zurückgegeben. Warum?
Würde mich sehr freuen, wenn ich ein paar Tipps bzgl. der Performanz bekommen könnte...
Vielen Dank im Voraus und beste Grüße,
Abgoosht
- Typ geändert Robert BreitenhoferModerator Montag, 12. September 2011 15:07 Keine Rückmeldung des Fragenstellender
Alle Antworten
-
Du hast zwar den Code des Views gepostet, nicht aber den interessanteren Teil
SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_TEST
(sys.fn_cdc_get_min_lsn('dbo_TEST'),sys.fn_cdc_get_max_lsn(), N'all with merge')und die Tabellenstrukturen die dem zugrundeliegen.
Auf Basis dieser Informationen lässt sich nichts wirklich Sinnvolles vorschlagen.
-- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org -
Du hast zwar den Code des Views gepostet, nicht aber den interessanteren Teil
SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_TEST
(sys.fn_cdc_get_min_lsn('dbo_TEST'),sys.fn_cdc_get_max_lsn(), N'all with merge')und die Tabellenstrukturen die dem zugrundeliegen.
Auf Basis dieser Informationen lässt sich nichts wirklich Sinnvolles vorschlagen.
-- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
Die Tabellenstruktur sieht wie folgt aus:1.)
SELECT [__$start_lsn] ,[__$operation] ,[__$update_mask] ,[Knr] ,[Key] ,[AIdent] ,[tnr] ,[twert] ,[tkey] ,[Neu] ,[Wer] ,[Wann] FROM [TEST_SCHEMA].[dbo].[CDC_TEST] GO Die zweite Tabelle ist eine typische Kundestamm-Tabelle mit Name, PLZ, Telefon etc. (200 Spalten!)
Die Funktion cdc.fn_cdc_get_net_changes_<capture_instance> siehe: http://msdn.microsoft.com/en-us/library/bb522511.aspx
VG,
Abgoosht
-
Hi,
Die zweite Tabelle ist eine typische Kundestamm-Tabelle mit Name, PLZ, Telefon etc. (200 Spalten!)
Öhm. Eine "typische" Kundenstamm-Tabelle hat IMHO keine 200 Spalten. Es sei denn, ihr klatscht da alles (wie bspw. sämtliche Adressen, ...) in eine einzige Tabelle.
An eurer Benennung solltet ihr ggfs. auch mal ein wenig feilen. Auch wenn das machbar ist, welchen Sinn sollten Spaltennamen wie ___$Irgendwas haben?
Das gepostete SELECT Statement ist nicht die Tabellenstruktur. Lass dir doch mal ein CREATE Skript für die Tabelle erstellen (rechte Maustaste im SSMS auf die Tabelle, "Skript für Tabelle als ...")
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
****************************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
****************************************************************************************************************