Avatar billede ixus Nybegynder
02. november 2005 - 18:01 Der er 11 kommentarer og
2 løsninger

Index i C5 SQL og USING og #USING

Davsen der,

Hvad forskel gør USING egentlig i SQL versionen af C5? Så vidt jeg kan spore, laver C5 først en SELECT noget FROM noget WHERE noget. Derefter laver den så en gang CURSOR FETCH osv.

Så er der egentlig nogen forskel på hvorvidt man angiver et index i XAL koden?

Ligeså, hvad er det lige forskellen er der lige på #USING() og USING? Kigger jeg i macroen står der bare USING %1.
Avatar billede Slettet bruger
02. november 2005 - 20:33 #1
USING i SQL versionen bliver oversat til ORDER BY.
Det vil sige det bliver kun brugt til sortering.
Avatar billede ixus Nybegynder
02. november 2005 - 20:39 #2
Tænkte det nok. Nå, men hvad med #USING? To forskellige C5 forhandlere siger det samme; #USING er bedre at bruge i C5 SQL, lyder til at de har drukket for meget Microsoft Kool-Aid.
Avatar billede mariaf Juniormester
02. november 2005 - 21:50 #3
Er det ikke ret nemt at test hvad der er hurtigst?
Avatar billede ixus Nybegynder
02. november 2005 - 21:55 #4
Jo, men min nysgerrighed går videre end det, hvorfor er det lige at macroen USING er så meget bedre end USING, når resultatet nu er det samme, så vidt jeg kan se?
Avatar billede jasman Nybegynder
02. november 2005 - 22:38 #5
... og nu må Broholm skride ind og rette mig, hvis jeg skriver noget forkert :):):)

USING tvinger databasen til at bruge det indeks som programmøren angiver.

#USING angiver hvordan programmøren vil have databasen til at sortere resultatet, men IKKE v.h.a. et bestemt indeks.
D.v.s. databasen må selv finde ud af, hvordan den hurtigst/bedst kan fremfinde data.

Det lyder måske ikke som om det vil gå hurtigere, men det vil det i langt de fleste tilfælde.

Meget forenklet kan man siger, at SQL-databaser idag fører en hel del statistik over hvordan data er placeret i basen. Dette gør at databasen faktisk er ret ferm til at fremfinde og sortere de data man ønsker. Derfor behøver man ikke at tvinge databasen til at bruge et bestemt indeks.

Så det er derfor skriver man #USING i SQL-versionen.
Avatar billede ixus Nybegynder
02. november 2005 - 22:49 #6
Jeg kan ikke se at den bliver påduttet til at bruge et index overhovedet ved brug af USING. Den gør pt. det som rahp har beskrevet.
Avatar billede Broholm Novice
02. november 2005 - 23:27 #7
Jasman: Beklager sådan er det desværre ikke.
Rahp: Du har ret.

I de nyere versioner af C5 er der INGEN forskel på at bruge #USING og USING. Forskellen glæder desværre kun i C5 2.10 SQL og i alle SQL/Oracle versioner af XAL.

Forskellen bestod i om "USING <index>" kom med i det komplilerede kode, og som raph beskriver så bliver en "USING <index" oversat til "ORDER BY <de felter som er i indexet>". Dette tvinger dog ikke SQL serveren til at bruge dette index, men da dette index passer 100% med de felter som den skal sorteres efter, vil den højst sansynlig vælge det.

Man kan godt i SQL sproget tvinge den til at bruge et bestemt SQL-indeks. Dette hedder et table-hint. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_fa-fz_4ox9.asp
<-- Se under Table Hints
Dette kan aktiveres i C5 vha. enten -zzh28 eller -zzh156 som opstartsparameter, men er ikke supporteret

Grunden til så at bruge #USING er at vise, at man er ligeglad med hvilken rækkefølge posterne kommer i og derved får lidt ekstra performance ved at en sortering udgås. Det er dog meget lidt ekstra performance dette giver i forhold til #SqlFieldList og #SqlSumList

SQL serveren er klog nok til, at man kan slippe afsted med følgende kode på SQL:

SEARCH IndKartArkiv USING NumTraIdx
WHERE  Transaktion == 42
  //...
END

Her vil den bruge TraNumIdx i stedet, da dette passer perfekt og giver samme sortering, når Transaktionsnummeret er låst.

-Broholm
Avatar billede Broholm Novice
02. november 2005 - 23:32 #8
Jasman: "Meget forenklet kan man siger, at SQL-databaser idag fører en hel del statistik over hvordan data er placeret i basen. Dette gør at databasen faktisk er ret ferm til at fremfinde og sortere de data man ønsker. Derfor behøver man ikke at tvinge databasen til at bruge et bestemt indeks."

Du får det til at lyde som om man ikke behøver indekser på SQL og det er meget langt fra sandheden. Indexerne skal stadig defineres af mennesker, men den er meget klog til at vurdere hvilket index, den kan bruge.
Avatar billede ixus Nybegynder
02. november 2005 - 23:35 #9
Kanon Broholm, dig kan man da altid regne med :) \o/.
Avatar billede ixus Nybegynder
02. november 2005 - 23:41 #10
I øvrigt, rahp, jeg vil gerne give dig point, så hvilken farven er din favorit farve?
Avatar billede jasman Nybegynder
03. november 2005 - 00:43 #11
Broholm ved ting !!! :o)
Avatar billede Slettet bruger
03. november 2005 - 07:18 #12
Giv du heller point til Broholm.
Avatar billede Broholm Novice
03. november 2005 - 11:29 #13
Rettelse: Det skal være -zzh30 eller -zzh158 som opstartsparametre
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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