Tábla indexelése sok INSERT és nagyon sok SELECT mellett?
2015-12-10T20:51:43+01:00
2015-12-11T15:53:55+01:00
2022-08-09T22:00:30+02:00
guard
Van egy egyszerűbb PHP alapú játék, ahol kis feladványokat kell megfejteni. (Emiatt percenként lehet akár 10 feladvány is.) A feladványok eredményeit a következő adattáblában tárolom:

azonosito: auto inc INT (indexelve)
USERID: unsigned BIGINT
IDOBELYEG: unsigned BIGINT
PONT: unsigned INT
PALYA_AZONOSITO: INT
TELJESITESI_IDO: FLOAT(4,2)

Minden megfejtett feladvány után beteszi INSERT-el a kapott pontszámot a fenti táblába, így ha van 100 játékos, és percenként 5 feladvány, akkor ez percenként 500 INSERT. (Mondjuk ez extrém példa.)
Viszont a játék élő toplistát mutat napi, heti, meg összesített lebontásban, pontszámra meg átlagidőre, így minden INSERT-re jut kb 15 SELECT. A SELECT-ben ezeket a mezőket teszem a WHERE-be: USERID, IBODELYEG, PONT, TELJESITESI_IDO

Hogy ne legyen olyan sok rekord a táblában, CRON-nal időzített PHP-vel minden nap végén lefuttatok egy sciptet, ami az előző napi rekordokat összesíti, így ha 100 játékos generált mondjuk 5000 rekordot, akkor abból lesz másnapra 100. A hetek végén is megteszem ugyanezt, heti összesítéssel.

Érdemes-e indexelni így az adattáblát, ha egy forgalmas napon lesz mondjuk 5.000 INSERT, és 75.000 SELECT? (Országos viszonylatban minőségi, osztott tárhelyen vagyok.)
Vagy futtatgassak lekérdezéseket a PHPMyAdmin-ban indexelve, meg index nélkül, és ott figyeljem a végrehajtási időket?

Köszönöm szépen!
Mutasd a teljes hozzászólást!
Hello,

Nekem van olyan rendszerem, ami 22mill rekordot intéz el egy óra alatt. No para. 5000 rekord az nem tétel.

Amíg tesztelsz és nem éles a dolog csinálj egy olyan scriptet , ami másodpercenkét sok rekordot insert. Hagyd ott amíg tesztelsz. Napokkal később látod, hogy mit kell még módosíts, ha még is lassulás lenne - nem lesz, ha az indexeket jó mezőkre teszed.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd