Avatar billede thoeger_poertner Nybegynder
28. august 2005 - 18:47 Der er 11 kommentarer og
1 løsning

Slette første record i tabel (intet unikt at gå ud fra)

Jeg skal slette den foerste record i en tabel, hvor jeg hverken har id eller andet unikt.

Jeg kan fint selecte med "SELECT top 1 bla bla" men ved DELETE virker det tilsyneladende ikke.

Er det nogen maade at goere dette paa?

Paa forhaand Tak!

Thoeger
Avatar billede arne_v Ekspert
28. august 2005 - 18:51 #1
hvis der ikke er noget unikt: nej

men du kan muligvis selecte over i en anden tabel, slette den originale og rename tilbage
Avatar billede arne_v Ekspert
28. august 2005 - 18:51 #2
og så er en primary key altså en god ting !  :-)
Avatar billede thoeger_poertner Nybegynder
28. august 2005 - 19:30 #3
Jah, det er lidt noget boevl det her.

Er igang med at lave ID paa tabellen nu, noget der ligner 50millioner records eller lignene. Kan sige sð meget at serveren har været igang i 20 minutter nu, med 70% cpu usage :)

I MySQL kan man da slette med Limit 1 - right?
Avatar billede thoeger_poertner Nybegynder
28. august 2005 - 19:32 #4
Hvad mener du egentlig med at "selecte over i en anden tabel, slette den originale og rename tilbage" - kan jeg flytte med et select?
Avatar billede arne_v Ekspert
28. august 2005 - 19:33 #5
hvis man kan lave DELETE LIMIT 1 i MySQL vil jeg kalde det en bug og ikke en feature
Avatar billede arne_v Ekspert
28. august 2005 - 19:33 #6
ja
Avatar billede thoeger_poertner Nybegynder
28. august 2005 - 20:16 #7
svarer selv then
Avatar billede ldanielsen Nybegynder
28. august 2005 - 22:25 #8
INSERT INTO nyTabel (col1, col2, col3) SELECT col1, col2, col3 FROM gammelTabel

Hvis nyTabel så har et IDENTITY felt, så er du hjemme.

Men det tager sandsynligvis lige så lang tid som det du har gang i.

50 millioner poster uden en primary key! Hvordan har det været at selecte noget fra den?
Avatar billede claesdamlund Nybegynder
29. august 2005 - 14:16 #9
Prøv med:
Delete From (Select Top 1 bla bla) as X

Eller:
Create View X
As
Select Top 1 bla bla
Go
Delete From X
Go
Drop View X

Har ikke testet det, men var bare en hurtig idé...
Avatar billede ldanielsen Nybegynder
29. august 2005 - 15:42 #10
DELETE kan ikke bruges i forbindelse med TOP. Hvis du vil slette en post skal du fortælle hvilken det er, så du kan gøre det sådan:

DELETE FROM tabel WHERE ident IN (SELECT TOP 10 ident FROM tabel WHERE etellerandet = noget ORDER BY ident)

Husk at bruge ORDER BY i forbindelse med TOP. Det er godt nok ikke noget krav, men hvis det ikke er klart hvad der skal sorteres efter, så er det heller ikke klart hvilke poster der vil blive slettet/valgt.

Hvis det handler om at du vil have slettet rigtig mange poster i forbindelse med noget oprydning, og du ikke vil have at det tager for lang tid, så kan du fint bruge den SQL heg har angivet her.

I den forbindelse kan du godt undlade ORDER BY, for så mener du jo netop:

"slet 10 poster, ligegyldigt hvilke 10, af de poster som jeg vil have slettet, nemlig dem hvor etellerandet = noget"
Avatar billede claesdamlund Nybegynder
29. august 2005 - 16:13 #11
Det var en fejl, men du kan bruge en simpel cursor:

Declare X Cursor For
Select Top 1 * From DinTabel -- Evt. uden Top 1
Open X
Fetch Next From X
Delete DinTabel Where Current Of X
Close X
Deallocate X
Avatar billede thoeger_poertner Nybegynder
30. august 2005 - 22:09 #12
Jeg har indtil videre lavet id i min stoooore tabel (der var 151mill records fandt jeg ud af da jeg lavede index, -just for the record ;))

Den søger faktisk rigtigt hurtigt, også med where clause mv.
Men min 50gb tabel blev lige ~20% større da jeg lavede index (ikke noget problem).

Jeg skal optimere scriptet, så jeg vil kigge på alle forslagene når jeg får tid. I skal ha mange tak.
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

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