Autor Subiect: optimizare baza de date  (Citit de 15960 ori)

lucaci

  • Vizitator
optimizare baza de date
« : Martie 02, 2008, 04:09:18 pm »
Salut,
Problema este urmatoare:
1 baza de date cu ~15-20 tabele de forma:
===================
id | nume | valoare
===================
scriptul php este de forma:
@mysql_query("update tabel set valoare = valoare + 1 where id = '$id' && nume = '$nume'");
if(mysql_affected_rows() == 0) {
   @mysql_query("insert into nume values ('$id' , '$nume' , '1')");
}
La fiecare tabel se executa acest script.   Intrebarea mea este cum ar trebui sa setez indecsi.   Sa setez id sau id, nume.   
Multumesc mult
p.  s.   se executa foarte multe query-uri in baza de date.   ~3-4 mil pe zi, iar baza de date o sa fie destul de mare.
« Ultima Modificare: Martie 02, 2008, 04:10:55 pm de lucaci »

Bogdan.eGazda

  • Webmaster
  • ****
  • Mesaje postate: 944
  • Karma: +13/-0
  • EGAZDA SRL
    • Vezi Profilul
    • http://www.egazda.ro
Răspuns: optimizare baza de date
« Răspuns #1 : Martie 03, 2008, 01:32:59 am »
id-ul nu este un camp unic?
Daca da fa-l primary key (ceea ce creeaza automat si index) si prima linie fa-o asa:
@mysql_query("update tabel set valoare = valoare + 1 where id = '$id');

lucaci

  • Vizitator
Răspuns: optimizare baza de date
« Răspuns #2 : Martie 03, 2008, 10:25:10 am »
Nu este camp unic.  Pot exista mai multe inregistrari cu acelasi id, doar cu nume diferite.  problema este ca trebuie sa afisez din date si la select ma gandeam ca trebuie si campul nume sa fie index, insa nu vr sa imi ingreuneze scriptul de mai sus pt ca ala este scriptul principal.

Bogdan.eGazda

  • Webmaster
  • ****
  • Mesaje postate: 944
  • Karma: +13/-0
  • EGAZDA SRL
    • Vezi Profilul
    • http://www.egazda.ro
Răspuns: optimizare baza de date
« Răspuns #3 : Martie 03, 2008, 12:07:49 pm »
Din pacate daca id nu este unic structura tabelelor este proiectata foarte prost.
Solutie in acest caz ar fi sa setezi primary key pe combinatia id + nume

lucaci

  • Vizitator
Răspuns: optimizare baza de date
« Răspuns #4 : Martie 03, 2008, 12:32:20 pm »
dap cred ca solutia este id + nume primary.   
tabelele sunt de forma:
id | browser | valoare
id | referrer | valoare
id | culori | valoare

scriptul este unul de statistici iar id este legatura dintre toate aceste tabele.   in fiecare tabel exista mai multe inregistrari care corespund aceluiasi id, ex:
1 | Firefox | 103
2 | Firefox | 319 
1 | Opera | 56
.  .  .  . 
multumesc mult pentru ajutor