Beste SQL-vrienden,
ik zit met een SQL performance probleem, ik ga even de situatie schetsen. Ik heb gemakkelijkheidshalve alle overbodige kolommen uit de voorbeeldtabel gehaald (de werkelijke tabel is een view en bevat 33 kolommen).
ik heb een tabel SERIAL_NUMBERS:
SERIAL_NUMBER kit_number
122............4
123............5
124............5
125............NULL
ik heb als input parameter een serial_number en wil met een select alle serial_number records uit de tabel halen die hetzelfde kit_number hebben, dan de opgegeven serial_number. Het kit_number kan ook NULL zijn, dan moet ik gewoon het serienummer terugkrijgen.
Mijn select gaat als volgt:
SELECT SERIAL_NUMBER
FROM serial_numbers
WHERE SERIAL_NUMBER = 123
OR (kit_number IN
(SELECT kit_number
FROM serial_numbers
WHERE SERIAL_NUMBER = 123
)
)
Het probleem is nu dat deze select soms 2 seconden duurt, wat niet praktisch is voor de gebruiker, die moet namelijk elke keer na het inscannen van een serienummer 2 seconden wachten.
Daarbij komt nog een keer dat de tabel nu nog maar 13210 serienummers bevat, dit zal in een productieomgeving nog heel wat kunnen oplopen (het gaat om grote magazijnen vol gsm's,herlaadkaarten enz)
De database is Oracle9i Release 9.2.0.4.0 - 64bit, ik heb al verschillende optimizer modes van oracle gebruikt, serial_number is de primary key in de tabel, en er staat een index op kit_number. Ik heb ook al geprobeerd met een UNION, maar dat duurt tot 7 seconden.
Iemand een idee om de select optimaler te maken? Alvast bedankt. Tom.
ik zit met een SQL performance probleem, ik ga even de situatie schetsen. Ik heb gemakkelijkheidshalve alle overbodige kolommen uit de voorbeeldtabel gehaald (de werkelijke tabel is een view en bevat 33 kolommen).
ik heb een tabel SERIAL_NUMBERS:
SERIAL_NUMBER kit_number
122............4
123............5
124............5
125............NULL
ik heb als input parameter een serial_number en wil met een select alle serial_number records uit de tabel halen die hetzelfde kit_number hebben, dan de opgegeven serial_number. Het kit_number kan ook NULL zijn, dan moet ik gewoon het serienummer terugkrijgen.
Mijn select gaat als volgt:
SELECT SERIAL_NUMBER
FROM serial_numbers
WHERE SERIAL_NUMBER = 123
OR (kit_number IN
(SELECT kit_number
FROM serial_numbers
WHERE SERIAL_NUMBER = 123
)
)
Het probleem is nu dat deze select soms 2 seconden duurt, wat niet praktisch is voor de gebruiker, die moet namelijk elke keer na het inscannen van een serienummer 2 seconden wachten.
Daarbij komt nog een keer dat de tabel nu nog maar 13210 serienummers bevat, dit zal in een productieomgeving nog heel wat kunnen oplopen (het gaat om grote magazijnen vol gsm's,herlaadkaarten enz)
De database is Oracle9i Release 9.2.0.4.0 - 64bit, ik heb al verschillende optimizer modes van oracle gebruikt, serial_number is de primary key in de tabel, en er staat een index op kit_number. Ik heb ook al geprobeerd met een UNION, maar dat duurt tot 7 seconden.
Iemand een idee om de select optimaler te maken? Alvast bedankt. Tom.