Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Select in oder Union Abfrage Optimierung mit Top (https://www.delphipraxis.net/119221-sql-select-oder-union-abfrage-optimierung-mit-top.html)

renekr 22. Aug 2008 14:52

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.

NormanNG 22. Aug 2008 15:04

Re: SQL Select in oder Union Abfrage Optimierung mit Top
 
Hi,

SQL-Code:
Wie ist das sonst noch möglcih ohne die Union ,weil die verdammt viel Performance schluckt.
Versuch´s mal mit UNION ALL in allen Teilabfragen, das sollte schon etwas schneller sein.

mkinzler 22. Aug 2008 15:07

Re: SQL Select in oder Union Abfrage Optimierung mit Top
 
Oder per SP

renekr 22. Aug 2008 15:12

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.

NormanNG 22. Aug 2008 15:17

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')

omata 22. Aug 2008 15:29

Re: SQL Select in oder Union Abfrage Optimierung mit Top
 
sorry, für den Vorschlag. Dann macht das man alleine...

NormanNG 22. Aug 2008 15:56

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:
DECLARE data CURSOR FOR
SELECT DISTINCT feeder_id
FROM vw_history_listen
WHERE feeder_id IN ('KA0000006', ...)
durch

SQL-Code:
DECLARE data CURSOR FOR
SELECT feeder_id
FROM vw_history_listen
WHERE feeder_id IN ('KA0000006', ...)
group by feeder_id
ersetzen.
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