Kezdőoldal » Számítástechnika » Programozás » MYSQL-ben hogy tudom megcsinálni?

MYSQL-ben hogy tudom megcsinálni?

Figyelt kérdés
ID mező auto increment és miután törlök egy rekordot, akkor ugyanonnan folytatja az indexelést és nagy rések keletkeznek. Hogy lehetne ezt megoldani?
2014. jan. 19. 14:35
 1/8 anonim ***** válasza:
100%

Sehogy. De nem is kell.

Tudod, hány rekord fér egy táblába? Sok.

2014. jan. 19. 14:44
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:

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.

2014. jan. 19. 14:49
 3/8 anonim ***** válasza:
100%

"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.

2014. jan. 19. 15:03
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:

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.

2014. jan. 19. 15:10
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

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.

2014. jan. 19. 16:05
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:
miért fontos neked hogy ne legyen rés? Nem jól csinálod.
2014. jan. 19. 17:57
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

"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.

2014. jan. 19. 19:27
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

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.

2014. jan. 22. 21:17
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!