Oprettet man. d. 27. december 2004 kl. 14:38:36

tonnym
tonnym (14.480 point. Point ude: 0)

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!

Skrevet man. d. 27. december 2004 kl. 17:16:57| #1

staticdata
staticdata (14.984 point)
"Not like" på tal er vist det samme som not equal - det hjælper måske lidt?

Skrevet man. d. 27. december 2004 kl. 17:23:31| #2

staticdata
staticdata (14.984 point)
..."not in" er vist også dyr. I stedet for "Not in (210, 223, 224, 226)" brug "forskellig fra" hver af værdierne.

Skrevet man. d. 27. december 2004 kl. 17:27:07| #3

staticdata
staticdata (14.984 point)
Damdam, og alle gode gange 3: "like" bør erstattes af "equal" - og "not like" af "not equal"

Skrevet man. d. 27. december 2004 kl. 20:33:51| #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.

Skrevet tir. d. 28. december 2004 kl. 08:29:30| #5

tonnym
tonnym (14.480 point)
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.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Formular med flere paramtre

Oprettet den 9. februar 2012 kl. 16.48
stuegnu giver 100 point for svar | Giv et svar »

Kodemodul ???

Oprettet den 8. februar 2012 kl. 17.05
olejohn giver 200 point for svar | Giv et svar »

Tabeller og forespørgsler er usynlige

Oprettet den 8. februar 2012 kl. 15.33
jensch giver 60 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Gør dig selv en tjeneste: Køb et ordentligt SD-kort

Der kan være meget stor hastighedsforskel på to umiddelbare ens SD-kort. Se her hvad du skal være opmærksom på, når du køber ekstra hukommelse til din mobil, tablet eller kamera.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Gratis flysimulator fra Microsoft

Den legendariske Flight Simulator fra Microsoft genopstår den 29. februar - og denne gang er spillet gratis.


Nyheder fra Computerworld

Teaser billede

Bank: Derfor er login uden NemID helt i orden

Der er ikke hold i påstanden om sikkerhedsproblemer i forbindelse med bankkunders login uden brug af NemID, lyder det fra Nykredit Bank.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger