> > Er det meningen, at der skal være 2 gange FROM gltabel?
>
> Ja. Det første angiver hvilken tabel der skal slettes fra (og kan
> ikke indeholde et join), mens det andet bruges til at angive
> joinbetingelser (det kan undværes hvis man ikke behøver et join).
Okay. Så lærte jeg også noget idag
> > I ASP ville jeg have lavet en query, der finder lngMaxId =
> > MAX(ID)-100000 og en DELETE FROM statement, der efter
> > kopieringen slettede alle records der er mindre end eller lig
> > med lngMaxId.
>
> Hvilken tabel finder du lngMaxId fra?
En tabel, der hedder Dating_ProfileHits. Design:
ID
ul_TargetId
ul_NickName
ul_HitDate
ul_HitDate
Status
Her ville jeg i ASP lave følgende kode:
Set Qry = Conn.Execute("SELECT MAX(ID) AS MID FROM Dating_ProfileHits;")
lngMaxId = CLng(Qry(0)-100000)
Data skal flyttes til tabellen Dating_ProfileHits_Backup med samme design.
> Hvilken tabel sletter du i?
Der skal slettes fra Dating_ProfileHits.
Alle records, der har en ID under lngMaxId (MAX(ID) minus de sidste 100.000
records) skal slettes.
> Uden et JOIN eller alternativt en WHERE EXISTS-del kan du ikke være
> 100 % sikker på at du kun sletter poster der faktisk er kopieret.
> Men det er måske også at gå med livrem og seler - en anden måde er
> at kontrollere maxID og antal poster i de to tabeller.
Det er ikke en vildt kritisk tabel.
Data skal blot flyttes til en ny tabel, fordi det tager LANG tid at udføre
en statement som denne:
SELECT TOP 6 ul_NickName,ul_TargetID FROM Dating_ProfileHits WHERE TargetID
= '" & Session("ul_ProfileID") & "' AND Status = 100 GROUP BY
ul_NickName,ul_TargetID ORDER BY MAX(ID) DESC;
på en tabel med 1,7 millioner records. Og denne statement blev indtil for få
dage siden udført på alle sider på et website med ca. 5 pageviews pr.
sekund. Det kunne tage mange sekunder, med deraf følgende lange svartider og
time outs fra SQL Serveren. Den er midlertidigt fjernet, indtil jeg får
flyttet data til en backup tabel.
Grunden til, at jeg overhovedet vil gemme besøgsdata tilbage fra november
2001 er, at jeg på et tidspunkt vil køre statistik på dataene og lave en
topliste over de mest besøgte profiler m.v..
> Det tager ikke mange resurser at gennemføre nogle af de INSERTS jeg
> har beskrevet. DELETE med JOIN vil muligvis tage ekstratid hvis der
> ikke er index på den nye tabel - men hvis id-feltet er det første
> er det ikke sikkert at det er noget problem. Ellers kan det løses
> ved at lave din kopitabel inden du sætter data ind - så kan du lave
> index på id-feltet med det samme.
Det er såmænd heller ikke INSERT'sene jeg er nervøs for - derimod det, at
den (sådan som jeg ser det - men jeg er som sagt ikke så stærk udi joins)
skal lave et opslag for hver gang den skal slette en record.
--
Mvh. Jesper