AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Brett vorm Kopf - SQL Query Problem

Brett vorm Kopf - SQL Query Problem

Ein Thema von sega84 · begonnen am 9. Nov 2012 · letzter Beitrag vom 16. Nov 2012
Antwort Antwort
sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#1

AW: Brett vorm Kopf - SQL Query Problem

  Alt 9. Nov 2012, 11:05
Das stimmt, allerdings benötige ich noch den Lieferanten. Deshalb auch der Join.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Brett vorm Kopf - SQL Query Problem

  Alt 9. Nov 2012, 11:15
Das SQL sieht richtig aus (wobei du auch ohne View hinkommen solltest):

Code:
select Preise.* from Preise join
(
  select ArtikelNr, MIN(EKPreis) as MinEKPreis
  from Preise group by ArtikelNr
) x
on Preise.ArtikelNr = x.ArtikelNr and Preise.EKPreis = x.MinEKPreis
Ich vermute eher, dass ein Index auf den entsprechenden Feldern fehlt. Schau mal in den Ausführungsplan. Dort wird wahrscheinlich ein Tablescan auftauchen, was die mangelnde Performance erklären würde.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Brett vorm Kopf - SQL Query Problem

  Alt 9. Nov 2012, 11:21
Die Indexe sind vorhanden.
Der Ausführungsplan gibt aus:
- Inner Join Kosten 41%
- Hash Mtch (Aggregate) Kosten 39%
- Clusted Index Scan (auf PK) 10% (2 mal)

Mit der View ist mir klar, brauche die View allerdings noch an anderen Stellen. Daher kann ich sie dort ja auch ruhig einbauen.

Was passiert aber, wenn es einen Artikeln bei mehreren Lieferanten zum gleichen günstigsten Preis gibt? Es werden dann ja beide Lieferanten ausgegeben, obwohl ich nur einen Datensatz je Artikel-Nr haben möchte.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Brett vorm Kopf - SQL Query Problem

  Alt 9. Nov 2012, 11:28
Der View scheint keine Index zu haben.
Ich würde hier eher eine Temp-Tabelle verwenden.
Nimm einen right join, dann wird nur noch ein Lieferant ausgegeben.

[EDIT]
Habe das mal testweise in Firebird nachgestellt, für 100000 DS braucht FB knapp 450 ms
Angehängte Grafiken
Dateityp: png Preisetest.png (42,6 KB, 17x aufgerufen)
Markus Kinzler

Geändert von mkinzler ( 9. Nov 2012 um 11:36 Uhr)
  Mit Zitat antworten Zitat
sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Brett vorm Kopf - SQL Query Problem

  Alt 9. Nov 2012, 11:32
OK,
vielen Dank!
  Mit Zitat antworten Zitat
sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Brett vorm Kopf - SQL Query Problem

  Alt 9. Nov 2012, 11:38
Hab es nun soweit geändert.
Ausführungszeit für 198.000 Datensätze: 3 Sekunden
Top!
Vielen Dank an alle!!!
  Mit Zitat antworten Zitat
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#7

AW: Brett vorm Kopf - SQL Query Problem

  Alt 16. Nov 2012, 09:18
Hallo,

Was passiert aber, wenn es einen Artikeln bei mehreren Lieferanten zum gleichen günstigsten Preis gibt?
ohne deinen Job jezt unnötig komplizieren zu wollen - aber sollte das nicht eigendlich von der Geschäftslogik vorgegeben werden, anstatt von der Datenbankabfragesemantik?
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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-2025 by Thomas Breitkreuz