Avatar billede tonnym Nybegynder
27. december 2004 - 14:38 Der er 1 kommentar og
4 løsninger

Query optimering

hej,

Jeg køre en query på en ret stor tabel, som for at gøre det hele mere langsomt, ligger på en svensk AS400 server i Sverige!

Selve min query ser således ud;
SELECT
LOTS5D_TXOHRE.OHORNQ,
LOTS5D_TXOHRE.OHKNRQ,
LOTS5D_KHKNDHUR.KHKOKU,
LOTS5D_KHKNDHUR.KHFPE,
LOTS5D_TXOHRE.OHSLDA,
Trim([OHFIKQ]) AS Filial,
Trim([OHOENQ]) AS Rst,
LOTS5D_TXOHRE.OHKPRI,
LOTS5D_TXOHRE.OHAKPR,
LOTS5D_TXOHRE.OHOSTS,
LOTS5D_TXOHRE.OHSTOR
FROM
LOTS5D_TXOHRE INNER JOIN LOTS5D_KHKNDHUR ON LOTS5D_TXOHRE.OHKNRQ=LOTS5D_KHKNDHUR.KHKNR
WHERE
(((LOTS5D_KHKNDHUR.KHKOKU) Not Like 519090 And (LOTS5D_KHKNDHUR.KHKOKU) Not Like 442707)

And ((LOTS5D_KHKNDHUR.KHFPE) Not Like "A" And (LOTS5D_KHKNDHUR.KHFPE) Not Like "S")

And ((LOTS5D_TXOHRE.OHSLDA) Between 1050101 And 1050131)

And ((([OHOENQ])) Not In (210,223,224,226))

And ((LOTS5D_TXOHRE.OHOSTS) Not Like "X" And (LOTS5D_TXOHRE.OHOSTS) Not Like "O")

And ((LOTS5D_TXOHRE.OHSTOR) Not Like 9));

Mit problem er så at det simpelt hen tager for lang tid at køre querien. Enten timer den ud, ellers låser den Access og får min tålmodighed til at løbe ud.. hvilket sker i hvert fald efter 10-15 minutter..

Jeg køre mange queries med andre kriterier, og de har en okay svartid på under 1 minut eller blot et par minutter højst. Men denne her trækker tænder ud.

Så var det jeg tænkte, måske den ikke var helt efter de bedste forskrifter for sådan nogle queries, og at det måske derfor er muligt at optimere den på en eller anden måde.

Jeg ved godt at tabel størrelsen samt det faktum at den skal hente data fra en server via internettet spiller ind, men som skrevet så har andre, lidt mindre afgrænsede, queries en acceptabel svartid.

Min query er tager ud af SQL visningen i MS Access, så det er ikke noget jeg selv har skrevet, dog har jeg selv sat "not like" og "not in" mv. ind som kriterier, og det er her jeg mistænker noget snavs som gør den langsom.

Sig til hvis det kræver flere oplysninger!
Avatar billede Jørgen Kirkegaard Professor
27. december 2004 - 17:16 #1
"Not like" på tal er vist det samme som not equal - det hjælper måske lidt?
Avatar billede Jørgen Kirkegaard Professor
27. december 2004 - 17:23 #2
..."not in" er vist også dyr. I stedet for "Not in (210, 223, 224, 226)" brug "forskellig fra" hver af værdierne.
Avatar billede Jørgen Kirkegaard Professor
27. december 2004 - 17:27 #3
Damdam, og alle gode gange 3: "like" bør erstattes af "equal" - og "not like" af "not equal"
27. december 2004 - 20:33 #4
ja, Like er den store synder! Den er meget langsom.

Brug <> i stedet for Not Like.

Derudover er det jo vigtigt, at indexerne er optimeret.

Der bør, som minimum, være index på følgende felter:
LOTS5D_TXOHRE.OHKNRQ
LOTS5D_KHKNDHUR.KHKNR
LOTS5D_KHKNDHUR.KHKOKU
LOTS5D_KHKNDHUR.KHFPE
LOTS5D_TXOHRE.OHSLDA
OHOENQ
LOTS5D_TXOHRE.OHOSTS
LOTS5D_TXOHRE.OHSTOR

Endelig kan det kraftigt anbefales at lave forespørgslerne som Videregivelsesforespørgsler (Pass-Through-queries). Derved sendes kun SQL'en afsted og kun svaret returneres, da det er serveren, som foretager udvælgelsen.
Dette klarer ODBC som regel automatisk, men når forespørgslen bliver for kompleks (som måske denne), kan ODBC ikke 'oversætte' udtrykket til AS400-syntaks og så skal alle tabeller hentes ned lokalt, hvorefter Access sørger for udvælgelsen. Og det tager tid!
Videregivelsesforespørgsler kræver bare, at du skriver SQL'en i serverens egen syntaks (som er lidt forskellig fra Access'). Men det virker.

Det samme bør man også altid gøre, når man arbejder med handlingsforespørgsler (append, delete, insert, update) op mod en databaseserver.
Avatar billede tonnym Nybegynder
28. december 2004 - 08:29 #5
Begge svar gav en bemærkselsesværdig forbedring!!

Mange tak for den lektion begge to!

Og også mange tak for tippet omkring pass-through-quieries! Det er bestemt noget som jeg vil dykke dybere ned i snarest muligt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester