Enormno podatkov, sesutje serverja
 
mitjast 25. mar 2013 13:55:45 Pridružen od:
16. nov 2011
37 objav
61 3 0
#11

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


všeč(1) ni všeč(0) spam(0)
 
b00mbar 25. mar 2013 14:09:25 Pridružen od:
18. jun 2008
350 objav
554 127 18
#12

Kaj pa pomeni da se sesuje? Kakšna napaka, ali dejansko vse freezne za neskončno časa?


všeč(1) ni všeč(0) spam(0)
Garantirano najhitrejše pure SSD Reseller gostovanje ( PHP7.1, Opcache, Nginx, MariaDB, Let's encrypt) | Brezplačna selitev strani in pošte | 400+ domen po izjemnih cenah
www.neoserv.si
 
gentleman 25. mar 2013 14:15:20 Pridružen od:
21. sep 2009
331 objav
381 63 5
#13

@mitjast, to javi tole:


Array ( [0] => stdClass Object ( [id] => 1 [select_type] => SIMPLE [table] => tarok_game [type] => ALL [possible_keys] => user1Id [key] => [key_len] => [ref] => [rows] => 2595105 [Extra] => Using where ) )

@b00mbar: Freeze, potem pa memory limit hit.



Baza izgleda takole:

http://s3.amazonaws.com/awesome_screenshot/1829120?AWSAccessKeyId=0R7FMW7AXRVCYMAPTPR2&Expires=1364221522&Signature=wLZhBSDQM7fhj7Q7uzsVpe0Pw4g%3D



Torej, dva miljona in pol vrstic, vsaka vrstica ima 4 polja možnih userIdjev.. za potrebe statistike moram single userju najdit vse igre v katerih je igral. Zdej, lahko je njegov id na enem izmed teh 4 polj.


všeč(0) ni všeč(0) spam(0)
 
mitjast 25. mar 2013 15:14:32 Pridružen od:
16. nov 2011
37 objav
61 3 0
#14

Link ne dela ok, javi AccessDenied.



Polje Key imaš prazno torej ne izbere indexa. Kopiraj še SQL, nekaj pri tem ni ok.


všeč(1) ni všeč(0) spam(0)
 
gentleman 25. mar 2013 15:21:44 Pridružen od:
21. sep 2009
331 objav
381 63 5
#15

Popravek image:


všeč(0) ni všeč(0) spam(0)
 
Gogy 25. mar 2013 15:28:31 Pridružen od:
17. mar 2007
2491 objav
2064 252 12
#16

Si poskusil Index na vsakem polju posebej od teh štirih?



Malo čudno je da bi ti sesulo server zaradi tega.



Če narediš kopijo kompletne baze in poženeš ta query na kopiji, se še vedno sesuje?


všeč(1) ni všeč(0) spam(0)
 
gentleman 25. mar 2013 15:34:47 Pridružen od:
21. sep 2009
331 objav
381 63 5
#17

Ubistvu samo memory limit dosežem.. Index na vsakem polju pa bom probal.


všeč(0) ni všeč(0) spam(0)
 
pavarti 25. mar 2013 17:27:42 Pridružen od:
26. okt 2011
445 objav
587 92 14
#18

zaay123:

Ubistvu samo memory limit dosežem.. Index na vsakem polju pa bom probal.




Lahko prikažeš SQL, ki ga izvedeš in zraven pripišeš kaj želiš doseči.

Sumim namreč, da napačno uporabljaš SQL poizvedbe. Mogoče selectaš preveč podatkov brez LIMIT, ali kaj podobnega.


všeč(1) ni všeč(0) spam(0)
 
gentleman 25. mar 2013 19:31:22 Pridružen od:
21. sep 2009
331 objav
381 63 5
#19
$where = "user1Id = '".$id."' OR user2Id='".$id."' OR user3Id='".$id."' OR user4Id='".$id."'";
$query = $this->db->query("EXPLAIN EXTENDED SELECT * FROM game WHERE $where");
return $query->result();

Takole gledam po podatkih. Rabim dobiti iz te tabele za single user ID vse njegove vrstice in njegov id je lahko v 4 različnih poljih.


všeč(0) ni všeč(0) spam(0)
 
mitjast 25. mar 2013 19:49:34 Pridružen od:
16. nov 2011
37 objav
61 3 0
#20

Ne uporabljaj SELECT *, ampak naštej polja ki jih dejansko rabiš, poleg tega poskusi še SELECT COUNT( * ) da vidiš koliko vrstic je izbranih. Mogoče je tu problem - da jih je preveč.


všeč(1) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se