Avatar billede shjorth Nybegynder
07. oktober 2009 - 17:32 Der er 7 kommentarer og
1 løsning

php og mysql ydelse

Hejsa.

Jeg har 2 tabeller i min db. Een der hedder "users" og en der hedder "reputation".

Min users tabel består af 17 felter, og reputation af 2.

Spørgsmålet er om det vil øge min sides "ydelse" at flytte reputation over i users, således at jeg istedet for at have 2 tabeller, kun har een, men med flere felter.

Jeg har et kæmpe problem i øjeblikket med ydelsen på min side, da databasen ganske enkelt knækker sammen.

Så, vil det at have een stor tabel, eller mange små have noget at sige?

Håber der er nogen der kan hjælpe.

Mange tak

ps: det halter lidt med points, derfor det lave antal
Avatar billede mrgumble Nybegynder
07. oktober 2009 - 17:51 #1
Ja, selvfølgelig skal du gøre det.

Eller måske skal du lade være.


Spørgsmålet er nok nærmere, hvordan du bruger dine data samt hvordan dit php-kode ser ud. Det er måske ikke engang muligt for dig, at samle dine to tabeller.
Har du indekseret dine tabeller?
Har du set på ydelsen af din php-kode kontra udførelsestiden for dine SQL-statements?
Avatar billede michael_stim Ekspert
07. oktober 2009 - 19:25 #2
Du skal normalisere din database så langt som det går. Du skal f ex ikke have samme data i flere rækker. Læs lidt om normalisering. Som det ser ud skal du nok snarere bryde users tabellen ud til flere tabeller. Men som mrgumble siger: check indexering og php kode. Tvivler på at du har så meget data så du kan knække en MySQL base ;o)
Avatar billede shjorth Nybegynder
07. oktober 2009 - 20:05 #3
Hej igen

php koden er presset, men på ingen måde så presset som mysql.
Jeg har været nødsaget til at benytte memcache da databasen simpelthen ikke kan følge med. Jeg har ca 300 sidevisninger i sekundtet, og der er select/insert/update på langt de fleste af siderne.
Med hensyn til insert,select så er det optimeret så meget som muligt.
Nu skal jeg så finde ud af om en tabel arbejder langsommere hvis der er flere felter i den.
I mine selects bruger jeg kun SELECT x,x,x og altså ikke SELECT *

Håber i forstår :)
Avatar billede dkfire Nybegynder
07. oktober 2009 - 23:29 #4
Er det en delt eller egen server du kører på ?

Har du overvejet at cache dine sider ? Det er vel ikke alle sider som ændre sig hele tiden.
Avatar billede shjorth Nybegynder
07. oktober 2009 - 23:36 #5
Det er egen server, dog ikke min, men en jeg lejer mig ind på.

Lige nu cacher jeg det dynamiske i headeren, altså det som går igen på alle sider.

Da det er et spil ligger der naturligvis en "account" osv i toppen på alle sider, og da det er dynamisk, er det et problem (så vidt jeg ved) at cache siderne. Så min bedste løsning indtil nu har været at cache mysql i headeren.
Avatar billede j4k0b Nybegynder
08. oktober 2009 - 11:42 #6
Jeg tror ærligt talt ikke det gør den store forskel. Spørgsmålet er nok nærmere hvilke og hvor mange opslag du laver.

Eksempelvis så trækker rekursive opslag tungt på databasen, især hvis opslagene udføres enkeltvis i modsætning til en stored procedure:
http://dev.mysql.com/tech-resources/articles/mysql-storedprocedures.html

En anden ting du kan skære ned på så vidt muligt er hvor meget du skriver til databasen. Kan du undgå at skrive så meget data til databasen? Kan du i øvrigt skære ned på antallet af forespørgsler der laves på hver side? Kan du eksempelvis tjekke en session efter login, i stedet for et databaseopslag, på hver side?

Brug i øvrigt aldrig WHERE felt LIKE '%noget%' på tabeller med over cirka 8000-10000 rækker, da metoden er enormt langsom. Brug så vidt muligt aldrig WHERE LIKE. Skal du søge tekster igennem så kik på noget fulltext search:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Sidst men ikke mindst så sørg for at alle dine tabeller er korrekt indekseret; for lidt indexes gør at et opslag kan tage meget langt tid (hvis Mysql skal udføre et "full table scan"). For mange indexes kan have den konsekvens at det tager langt tid at skrive til databasen. Put et index på alle felter du søger på.
Avatar billede shjorth Nybegynder
03. december 2009 - 21:30 #7
Jeg valgte at smide det over i users. Om det var godt eller skidt ved jeg ikke :( Optimering af database er en jungle :(

Takker mange gange. Svar?
Avatar billede shjorth Nybegynder
30. januar 2010 - 12:30 #8
Jeg lukker.. Skriv endelig hvis der er brok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester