![]() |
Datenbank: SQL Server2005 • Version: 2005 • Zugriff über: ADO
SQL Select in oder Union Abfrage Optimierung mit Top
Hallo,
Ich stehe gerade for einer Auswertung und möchte folgendes machen: Eine Abfrage von einer History Table mit dem SQL Befehl Select in oder union. Allerdings möchte ich für jeden der in der Select in drin steht nur max 20 Ergebnisse von der History bekommen. Wie ist das sonst noch möglcih ohne die Union ,weil die verdammt viel Performance schluckt.Teilweise gibt es bis über 300 Feeder.
SQL-Code:
SELECT TOP (20) Feeder_ID, PU_NR, Sachnummer, Becker_SNR, Marry_Time, Computername, Linie
FROM dbo.VW_History_Listen WHERE (Feeder_ID = 'KA0000383') UNION SELECT TOP (20) Feeder_ID, PU_NR, Sachnummer, Becker_SNR, Marry_Time, Computername, Linie FROM dbo.VW_History_Listen AS VW_History_Listen_42 WHERE (Feeder_ID = 'KA0000385') UNION SELECT TOP (20) Feeder_ID, PU_NR, Sachnummer, Becker_SNR, Marry_Time, Computername, Linie FROM dbo.VW_History_Listen AS VW_History_Listen_41 WHERE (Feeder_ID = 'KA0000387')
SQL-Code:
select * from Feedermgmt.dbo.VW_History_Listen where Feeder_ID in ( 'KA0000006','KA0000008','KA0000013','KA0000014','KA0000019','KA0000022','KA0000027','KA0000037','KA0000040'
,'KA0000124','KA0000130','KA0000138','KA0000180','KA0000201','KA0000231','KA0000245','KA0000304','KA0000333','KA0000342', 'KA0000582','KA0000595','KA0000602','KA0000625','KA0000645','KA0000749','KA0000801','KA0000809','KA0000832','KA0000910', 'KA0000989','KA0001175','KA0001213','KA0001214','KA0001229','KA0001248','KA0001268','KA0001287','KA0001289','KA0001290', 'KA0001343','KA0001389','KA0001434','KA0001435','KA0001441','KA0001445','KA0001447','KA0001455','KA0001456','KA0001458', 'KA0001466','KA0001470','KA0001471','KA0001472','KA0001474','KA0001477','KA0001494','KA0001501','KA0001502','KA0001516', 'KA0001517','KA0001518','KA0001520','KA0001523','KA0001525','KA0001536','KA0001537','KA0001538','KA0001539','KA0001540', 'KA0001541','KA0001549','KA0001550','KA0001553','KA0001554','KA0001555','KA0001556','KA0001913','KA0001917','KA0001919', 'KA0001920','KA0001926','KA0001927','KA0001929','KA0001930','KA0001935','KA0001938','KA0001940','KA0001942','KA0001943', 'KA0001944','KA0001945','KA0001952','KA0001955','KA0001956','KA0001957','KA0001960','KA0001961','KA0001973','KA0001978', 'KA0001981','KA0001997','KA0002008','KA0002009','KA0002011','KA0002012','KA0002017','KA0002018','KA0002019','KA0002020', 'KA0002021','KA0002022','KA0002023','KA0002025','KA0002029','KA0002030','KA0002031','KA0002034','KA0002037','KA0002038', 'KA0002041','KA0002042','KA0002045','KA0002046','KA0002050','KA0002098','KA0002099','KA0002109','KA0002944','KA0002945', 'KA0002951','KA0003011','KA0003051','KA0003052','KA0003201','KA0003229','KA0003246','KA0003248','KA0003249','KA0003257', 'KA0003263','KA0005583','KA0005585','KA0005587','KA0005588','KA0005590','KA0005614','KA0005645','KA0005646','KA0006261', 'KA0006266','KA0006272','KA0006276','KA0006277','KA0006279','KA0006295','KA0006297','KA0006299','KA0006315','KA0006320', 'KA0006324','KA0006468','KA0006473','KA0006474') order by Feeder_ID,Marry_Time desc Vielen dank. |
Re: SQL Select in oder Union Abfrage Optimierung mit Top
Hi,
SQL-Code:
Versuch´s mal mit UNION ALL in allen Teilabfragen, das sollte schon etwas schneller sein.
Wie ist das sonst noch möglcih ohne die Union ,weil die verdammt viel Performance schluckt.
|
Re: SQL Select in oder Union Abfrage Optimierung mit Top
Oder per SP
|
Re: SQL Select in oder Union Abfrage Optimierung mit Top
Hi Norman,
Wie meinst das genau in allen Teilabfragen ? Denke in der SP wirds auch nicht viel besser sein.. Danke. |
Re: SQL Select in oder Union Abfrage Optimierung mit Top
Hi,
ich meinte das so
SQL-Code:
SELECT TOP (20) Feeder_ID, PU_NR, Sachnummer, Becker_SNR, Marry_Time, Computername, Linie
FROM dbo.VW_History_Listen WHERE (Feeder_ID = 'KA0000383') UNION ALL SELECT TOP (20) Feeder_ID, PU_NR, Sachnummer, Becker_SNR, Marry_Time, Computername, Linie FROM dbo.VW_History_Listen AS VW_History_Listen_42 WHERE (Feeder_ID = 'KA0000385') UNION ALL SELECT TOP (20) Feeder_ID, PU_NR, Sachnummer, Becker_SNR, Marry_Time, Computername, Linie FROM dbo.VW_History_Listen AS VW_History_Listen_41 WHERE (Feeder_ID = 'KA0000387') |
Re: SQL Select in oder Union Abfrage Optimierung mit Top
sorry, für den Vorschlag. Dann macht das man alleine...
|
Re: SQL Select in oder Union Abfrage Optimierung mit Top
Hi,
wenn es nicht nur ein paar Tausend Datensätze werden, dann würde ich aber zumindest
SQL-Code:
durch
DECLARE data CURSOR FOR
SELECT DISTINCT feeder_id FROM vw_history_listen WHERE feeder_id IN ('KA0000006', ...)
SQL-Code:
ersetzen.
DECLARE data CURSOR FOR
SELECT feeder_id FROM vw_history_listen WHERE feeder_id IN ('KA0000006', ...) group by feeder_id Bei geeigneten Indizes wird das deutlich schneller sein. Weiter Performance-Killer sind #Temp-Tabelle und natürlich der Cursor, wobei das bei 20x300 Zeile evtl. erträglich bleibt :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz