Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL viel zu langsam (https://www.delphipraxis.net/180518-sql-viel-zu-langsam.html)

Jumpy 26. Mai 2014 13:49

AW: SQL viel zu langsam
 
[OT]

Hatte mir das Freitag zufällig mal reingezogen, weil dazu eine Mail von Emba kam. Fand es eigentlich ganz interessant, da es (zwar bezogen auf Oracle) einige Hinweise gibt, wie man die Performance seiner Abfragen verbessern kann.

https://www.youtube.com/watch?v=RMc1...ature=youtu.be

[/OT]

mkinzler 26. Mai 2014 14:07

AW: SQL viel zu langsam
 
Du benötigst einen Index auf Itemid und Transcode. Auf alle 4 und auf die einzelnen hilft ja nichts.

MyRealName 26. Mai 2014 14:46

AW: SQL viel zu langsam
 
Zitat:

Zitat von mkinzler (Beitrag 1260279)
Du benötigst einen Index auf Itemid und Transcode. Auf alle 4 und auf die einzelnen hilft ja nichts.

Dieses Query läuft jetzt auch schon 10 Minuten ohne Ergebnis :(

Fertig nach 11 Minuten

Plan
PLAN SORT (JOIN (ED1 INDEX (ENSAMBLED_IDX_TRANSCODE), ED2 INDEX (ENSAMBLED_IDX1_ITEMID_TC)))

ENSAMBLED_IDX1_ITEMID_TC = Index auf ItemID und Transcode zusammen.

Dejan Vu 26. Mai 2014 14:54

AW: SQL viel zu langsam
 
Dann könnte man noch so vorgehen:
Code:
select * from (
  SELECT DISTINCT
   ED1.Item,
   ED1.Location,
   ED1.ItemID
  FROM
   EnsambleD ED1 
  WHERE ED1.TransCode = 'S'
) x where not exists (
  SELECT DISTINCT ED2.Itemid
    FROM EnsambleD ED2 
   WHERE ED2.Itemid=x.Itemid AND ED2.TransCode='EI')
)
Nun sind vielleicht weniger Kandidaten zum prüfen auf not exists...

MyRealName 26. Mai 2014 15:16

AW: SQL viel zu langsam
 
@DejaVu
Das query braucht 10m14s

Das originale von ganz am Anfang mit dem NOT EXISTS braucht 10m08s

Um Längen besser als die 2h von vorher. Danke, mkinzler und alle anderen...

Dejan Vu 26. Mai 2014 16:20

AW: SQL viel zu langsam
 
Zitat:

Zitat von MyRealName (Beitrag 1260296)
Das query braucht 10m14s...

Trotzdem merkwürdig, das das so lange dauert...

MyRealName 26. Mai 2014 16:58

AW: SQL viel zu langsam
 
Definitiv. Werd es wohl ncohmal neu schreiben, aber in Delphi... da brauch ich unter 10 Sekunden für diese Liste.

himitsu 26. Mai 2014 17:07

AW: SQL viel zu langsam
 
Zitat:

SQL-Code:
SELECT DISTINCT ED1.Item, ED1.Location, ED1.ItemID
      FROM EnsambleD ED1
      WHERE ED1.TransCode='S ' AND
            NOT EXISTS (SELECT DISTINCT ED2.Itemid FROM EnsambleD ED2 WHERE ED2.Itemid=ED1.Itemid AND ED2.TransCode='EI')

Was mir hier in den Sinn kommt: Ist der Query-Planer eigentlich intelligent genug, um zu erkennen, daß die Ergebnisliste des SubSelects eigentlich garnicht nötig ist?


SQL-Code:
SELECT DISTINCT Item, Location, ItemID
      FROM EnsambleD
      WHERE TransCode='S ' AND
            NOT EXISTS (SELECT True FROM EnsambleD AS ED2 WHERE ED2.Itemid=EnsambleD.Itemid AND ED2.TransCode='EI' LIMIT 1)

Dejan Vu 26. Mai 2014 17:16

AW: SQL viel zu langsam
 
Du meinst, wegen dem 'DISTINCT'?

Laut einschlägigen Foren ist folgendes Äquivalent (wobei man FB nie wissen kann)
... where exists (select 1 from foobar)
--
... where exists (select * from foobar)

weil ja nicht die Ergebnismenge erzeugt wird, sondern beim ersten Treffer TRUE geliefert wird.

himitsu 26. Mai 2014 17:35

AW: SQL viel zu langsam
 
Zitat:

Zitat von Dejan Vu (Beitrag 1260326)
Laut einschlägigen Foren ist folgendes Äquivalent (wobei man FB nie wissen kann)
... where exists (select 1 from foobar)
--
... where exists (select * from foobar)

Eigentlich vorallem deswegen.
Also Diesbezüglich soll der also intelligent genug sein.

Wenn erst die komplette Liste erzeugt und danach erst das EXISTS ausgewertet würde, dann wäre das ja unnütze Arbeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Seite 2 von 3     12 3      

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-2025 by Thomas Breitkreuz