MYSQL-ben hogy tudom megcsinálni?
Sehogy. De nem is kell.
Tudod, hány rekord fér egy táblába? Sok.
Nem túl optimális, ha ekkora rések lesznek. Feltételezem a teljesítmény is romlik visszakeresésnél.
És nekem mindenképp a következő id kell, nem a 4. után a 37.
"Nem túl optimális, ha ekkora rések lesznek. Feltételezem a teljesítmény is romlik visszakeresésnél."
Ne feltételezd.
"És nekem mindenképp a következő id kell, nem a 4. után a 37."
Akkor valamit rosszul csinálsz.
Elég sok id fér el egy táblában és nem véletlenül működik így az auto increment.
A sebességről pedig ne feltételezz ilyeneket, mert hülyeség.
Azért működik így szerintem, mert ha van T2 táblád, ami hivatkozik a T1 tábla 5-ös ID-jű rekordjára és nincs idegen kulcs beállítva, akkor ha törlöd az 5-ös ID-jű rekordot, majd újat teszel be, a hivatkozás már nem lesz korrekt.
Hogyan lehetne mégis megoldani:
Mielőtt beszúrsz egy új rekordot, lekérdezed a legmagasabb ID-t, hozzáadsz egyet és beleteszed az INSERT-be.
"Hogyan lehetne mégis megoldani:
Mielőtt beszúrsz egy új rekordot, lekérdezed a legmagasabb ID-t, hozzáadsz egyet és beleteszed az INSERT-be."
Ez sem jó, mert mi van ha "közben" törölsz valamit?
Pl.: 1,2,8,9 -> Itt máris megmaradna a rés a te módszereddel.
De persze megoldható, csak tök fölösleges.
Ha kevés lenne az int, akkor ott a bigint vagy még pár másik módszer az ID készítésre.
Az ID-nek, ahogy a nevében is van az a feladata, hogy egyedi legyen.
Ha csak úgy törölnél és újra felhasználnál egy id-t, akkor egy nem megfelelően karbantartott adatbázisban elég csúnya dolgokat lehetne csinálni, mint azt korábban is említették az összekapcsolásoknál.
Először is az ID-re legyen egy indexed, ez ugye alap. Ettől nagyon függ a sebesség.
Másodszor, amit te akarsz, ha jól értem, hogy újra kiadd a már törölt rekordok ID-jét, azt magyarul öngyilkosságnak hívják. Ennyi erővel egy flakon nitroglicerinnel is mászkálhatnál. Programozó ilyet ne tegyen.
Harmadszor meg a teljesítmény attól romlik, ha nagyon felgyűlnek azok a logikailag törölt rekordok, amiket te már nem látsz a lekérdezésben, de fizikailag a lemezen vannak. Ez a rendszeres takarítással előzhető meg. Postgresql-ban vacuumnak hívják, a mysql-ben is kell legyen valami megfelelője, annak nézz utána.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!