Kom ihåg mig?
Home Menu

Menu


Tabellunderhåll i MySQL

Ämnesverktyg Visningsalternativ
Oläst 2005-07-18, 20:17 #1
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
Har en antal tabeller (ganska många egentligen) som byggs på med en ny rad med jämna mellanrum. För att spara diskutrymme och snabba upp access vill jag då och då rensa bort rader ur tabellerna, och då ett antal av de äldsta (första) raderna.

Det blir väl att använda en vanlig DELETE
Kod:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [WHERE where_definition]
    [ORDER BY ...]
    [LIMIT row_count]
Men nu är det så att tabellerna inte har något löpande id eller liknande, eller datum, så jag kan inte använda WHERE för att hitta de äldsta posterna som jag ska ta bort.

Vill höra om det fungerar att använda LIMIT utan WHERE för att åstadkomma detta?

Alltså typ

Kod:
DELETE FROM tbl_name
    LIMIT 200
för att ta bort de första 200 raderna?? Är lite osäker, eftersom referensmanualen säger

Citat:
If you issue a DELETE statement with no WHERE clause, all rows are deleted.
och det vill jag ju inte!

Eller finns något smartare sätt att göra ett sånt här underhåll på?
aikon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-07-18, 20:25 #2
tydal tydal är inte uppkopplad
Medlem
 
Reg.datum: May 2005
Inlägg: 130
tydal tydal är inte uppkopplad
Medlem
 
Reg.datum: May 2005
Inlägg: 130
Du kan använda limit, men utan löpande id eller datum kan du inte vara säker på att rätt rader försvinner. Det är just det här som är anledningen till att man har datum och/eller löpande id.
tydal är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-07-18, 20:34 #3
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
Var rädd för det. Tabellerna borde som sagt inte se ut så där, men de är skapade i en annan miljö (lokal pc) och när jag lyfte ut detta på webben ville jag hålla tabellerna intakta. Det var det kortsiktigt enklaste då, men nu inser jag att jag borde gjort om strukturen...

Finns något sätt att räkna ut vilka rader som tas bort med en limit utan where? Tabellerna är skapade och först fyllda med rader genom import av en textfil, och därefter har nya rader skapats på normalt sätt med INSERT INTO i SQL.

EDIT: Förresten (utan att läsa på..), kan jag nu i efterhand lägga till ett idfält med auto_increment till dessa tabeller?
aikon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-07-18, 21:07 #4
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
Svarar mig själv med ett visst, det går ju utmärkt. En ALTER med ADD lägger till ett id och auto_increment numrerar de befintliga raderna snyggt och prydligt från 1 och upp.

Men ett problem är att genom att lägga till ytterligare ett fält så gör jag tabellen 20% större, vilket motverkar själva avsikten med hela proceduren.

Jag skulle tro att en DELETE med LIMIT utan WHERE borde ta bort rätt rader, de första, eftersom det gick att lägga till ett idfält som numrerade raderna i korrekt ordning. Då borde ju även limit ta dem i rätt ordning, tycker man...
aikon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-07-18, 21:25 #5
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Fast sen är det ju så att bara för att filen blir större behöver det inte alls betyda att den blir långsammare, det kan vara tvärt om...
Lindahl är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-07-18, 21:26 #6
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
Hmm, jo, DELETE med limit tar bort rätt rader, men när man sedan gör en INSERT INTO så hamnar dessa först i de "tomma luckorna". Så kan jag inte ha det. Det verkar som jag måste åstadkomma ett fält med löpande id för att göra detta. Datat är nämligen kronologiskt, och kan inte stoppas in var som helst... Nu får man sota för att man lat tidigare.
aikon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-07-18, 21:30 #7
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
aikon aikon är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 277
Citat:
Originally posted by Baltiz@Jul 18 2005, 21:25
Fast sen är det ju så att bara för att filen blir större behöver det inte alls betyda att den blir långsammare, det kan vara tvärt om...
Japp, i synnerhet om man får ett lämpligt index, men det är diskutrymmet som är det viktiga här. Databasen är MYCKET stor, och växer hela tiden, och trots mitt webbhotells generösa villkor för lagringsutrymme vet jag inte hur länge jag klarar mig utan att köpa mer plats.
aikon är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:53.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017