Enormno podatkov, sesutje serverja

Pozdravljeni mojstri!

Prvič se srečujem z zelo zelo veliko bazo podatkov v PHP/MySQL.
Imam tabelo ki im trenutno 2,571,934 zapisov. Notri je kar precej polj z veliko podatki.

Za potrebe statistike moram čez vsa ta polja spustiti:

$where = "user1Id = '".$id."' OR user2Id='".$id."' OR user3Id='".$id."' OR user4Id='".$id."'";

da najdem uporabnika in vse njegove rezultate. Baza se takoj sesuje ko to spustim skozi.
Kakšne so rešitve in alternative.. Kaj uporabiti, oz. kaj iskati pri Googlu?

Uporabljam CodeIgniter.

Hvala!

23 odgovorov

Uporabljaš MySQL Indexe? (http://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html)

1

Naj te potolažim da to ni ravno velika baza čeprav se tebi morda zdi velika.

No, vsekakor postavit indexe, pa še to bi bilo potrebno pogledat, da se indexi postavijo pravilno, sicer ne bo pravega učinka morda. Jaz bi grupiral en index na te 4 kolone.

Se dela še kaka težja poizvedba v ozadju medtem ko se dela poizvedba o kateri pišeš?

4

Tvoj dizajn baze smrdi do moje hiše. :)

Mišljeno dobronamerno. Poglej si malo normalizacijo.

2

Kaj pa ko bos mel 500 userjev? Za vsakega nov column v bazi?

technolog:
Tvoj dizajn baze smrdi do moje hiše. :)

Mislim, da ni nujno. Če je lahko userjev max 4. je čisto uredu in se izogneš relaciji.

Fantje, v to tabelo se zapisuje vsaka odigrana igra uporabnikov. Lahko igrajo max 4 uporabniki, za vsakega se zapiše ID, koliko točk je pri igri dosegel, itd,.... Zdaj pa lahko je na 1,2,3,4 polju, zato moram čez vse spustiti where. To sicer ni moj design baze, delam na enem starem projektu.

Torej, pravite da si pogledam indexe in relacije malo bolje in rešim zadevo. Deal. Workin on it. Thank you!

Fantje; Postavil sem en index na te štiri kolone, efekt je še vedno enak.. sesutje ko poženem query ;(

Probaj narediti index na vsak column posebej.

1

Zaay123 kaj če poganjaš 4 querye ?

Se pravi poženeš en query za user1Id, če ne vrne rezultata greš delat drugi query, itd...

Verjetno iščeš po nekem ID igre, itd ...

1

Lahko zapišeš strukturo tabele tule? Poleg tega, poženi EXPLAIN EXTENDED SELECT ..., torej pred sam select podaj EXPLAIN EXTENDED, preko tega boš videl kako MySQL uporablja te indexe (če sploh).

1