![]() |
AW: Firebird IN, EXISTS Langsam
Zitat:
... habs zwar gelesen, aber hab mir nicht wirklich was raussuchen können, was mir helfen könnte in diesem fall Ich habe einfach das problem, das so eine "primitive" sache, wo es eigentlich nur darum geht eine SELECT zu machen (die 0.05 sekunden dauert) und von dieser dann ID's aus einer anderen Abfrage abzuziehen (die auch 0.05 sekunden dauert) - das dann 26 sekunden dauert ... das geht enfach nicht in meinen kopf, das man das nicht mit "normalen einfachen" SQL Mitteln zumindest auf 0.5 Sekudnen oder so optimieren kann Und das müsste ja eigentlich auch OHNE einen Index auf Artikel_ID funktionieren ... (Schon klar ich werde morgen den Index drauf legen ... aber ist mir noch immer nicht ganz logisch, das es nicht ohne den geht ... ) |
AW: Firebird IN, EXISTS Langsam
Deine DB-Struktur sieht also folgendermaßen aus...
SQL-Code:
Ist das richtig?
CREATE TABLE artikel (
artikel_id int, CONSTRAINT PK_artikel PRIMARY KEY (artikel_id) ); CREATE TABLE position ( position_id int, CONSTRAINT PK_position PRIMARY KEY (position_id) ); CREATE TABLE artikel_position ( artikel_id int, position_id int, CONSTRAINT PK_artikel_position PRIMARY KEY (artikel_id, position_id), CONSTRAINT FK_artikel_position_artikel FOREIGN KEY (artikel_id) REFERENCES artikel (artikel_id), CONSTRAINT FK_artikel_position_position FOREIGN KEY (position_id) REFERENCES position (position_id) ); |
AW: Firebird IN, EXISTS Langsam
Also das ist die original Abfrage
Code:
SELECT A.ARTIKELNUMMER
FROM ARTIKEL A /*Hier wäre noch joins drinnen, aber die habe ich mal weggelassen, da diese keine zeit in anspruch nehmen */ WHERE A.ID NOT IN ( SELECT T.ARTIKEL_ID FROM AUFTRAG VA, AUFTRAG_INFO AF, POSITIONEN T WHERE (AF.ID = VA.INFO_ID) AND (T.AUFTRAG_ID = VA.ID) AND (VA.MesseSTATUS > 0) AND ((CAST(AF.MesseBis AS Date) >= CURRENT_TIMESTAMP) And (Cast(AF.MesseVon AS Date) <= CURRENT_TIMESTAMP + 10)) ) [EDIT}Also das erzeugen eines Index auf POSITIONEN(ARTIKEL_ID) hat es gebracht ... nun dauerrts ca 0.05 sekunden :) ... ich verstehe zwar nicht warum er das braucht aber, vielleicht merke ich es mir nun .... [/EDIT] |
AW: Firebird IN, EXISTS Langsam
Schade, das du keine Fragen beantwortest. Naja, dein Problem ist ja gelöst, verstehen wird auch überbewertet.
|
AW: Firebird IN, EXISTS Langsam
Zitat:
so versuche es noch einmal :
Code:
CREATE TABLE ARTIKEL (
ID INTEGER NOT NULL , ARTIKELNUMMER VARCHAR(100) , PRIMARY KEY("ID")); CREATE TABLE AUFTRAG ( ID INTEGER NOT NULL , MesseBis TIMESTAMP , MesseVon TIMESTMAP , PRIMARY KEY("ID")); CREAT TABLE AUFTRAG_INFO ( ID INTEGER NOT NULL , INFO_ID INTEGER , MESSESTATUS INTEGER , PRIMARY KEY("ID")); CREATE TABLE POSITIONEN ( ID INTEGER NOT NULL , AUFTRAG_ID INTEGER , ARTIKEL_ID INTEGER , PRIMARY KEY("ID")); |
AW: Firebird IN, EXISTS Langsam
Zitat:
|
AW: Firebird IN, EXISTS Langsam
Hallo,
es sind hier keine Foreign-Key Constraints angegeben. Würden FK-Constraints angelegt worden sein, dann wären automatisch auch auf den entsprechenden FK-Felder Indizes sein und das Performance-Problem wäre nie entstanden. Nur so ein Gedanke. Thomas |
AW: Firebird IN, EXISTS Langsam
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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