Avatar billede gjessing Nybegynder
05. august 2009 - 00:25 Der er 9 kommentarer og
1 løsning

Query som får serveren i knæ

hej - er der nogle der kan se om dette kan være årsagen til min server går i knæ - og evt ved hvordan man skal lave den forspørgelse anderledes.?

$now_time=time();
    if($_GET[area] == "jylland")
    {
    $ProfilQuery = mysql_query("select * from date_profiler,user_validation WHERE date_profiler.id=user_validation.uid AND user_validation.validupto > 'now_time' AND date_profiler.jylland = '1' AND date_profiler.aktiveret ='1' OR date_profiler.arhus ='1' HAVING date_profiler.kon = '$_GET[kon]' ORDER by RAND()");
    } elseif($_GET[area] == "arhus")
Avatar billede arne_v Ekspert
05. august 2009 - 01:13 #1
Har du index på alle de felter som du tester på ?
Avatar billede gjessing Nybegynder
05. august 2009 - 20:20 #2
nej det ved jeg ikke hvordan man gør.
men jeg ved ikke om det er den rigtige måde at lave den query på

her er den komplette
-----------------------
          $now_time=time();
    if($_GET[area] == "jylland")
    {
    $ProfilQuery = mysql_query("select * from date_profiler,user_validation WHERE date_profiler.id=user_validation.uid AND user_validation.validupto > 'now_time' AND date_profiler.jylland = '1' AND date_profiler.aktiveret ='1' OR date_profiler.arhus ='1' HAVING date_profiler.kon = '$_GET[kon]' ORDER by RAND()");
    } elseif($_GET[area] == "arhus") {
    $ProfilQuery = mysql_query("select * from date_profiler,user_validation WHERE date_profiler.id=user_validation.uid AND user_validation.validupto > 'now_time' AND date_profiler.arhus = '1' AND date_profiler.aktiveret ='1' OR date_profiler.jylland = '1' HAVING date_profiler.kon = '$_GET[kon]' ORDER by RAND()");
    }elseif($_GET[area] == "sjalland") {
    $ProfilQuery = mysql_query("select * from date_profiler,user_validation WHERE date_profiler.id=user_validation.uid AND user_validation.validupto > 'now_time' AND date_profiler.sjalland = '1' AND date_profiler.aktiveret ='1' OR date_profiler.kbh ='1' HAVING date_profiler.kon = '$_GET[kon]' ORDER by RAND()");
    }elseif($_GET[area] == "kbh") {
    $ProfilQuery = mysql_query("select * from date_profiler,user_validation WHERE date_profiler.id=user_validation.uid AND user_validation.validupto > 'now_time' AND date_profiler.kbh = '1' AND date_profiler.aktiveret ='1' OR date_profiler.sjalland = '1' HAVING date_profiler.kon = '$_GET[kon]' ORDER by RAND()");
    }elseif($_GET[area] == "fyn") {
    $ProfilQuery = mysql_query("select * from date_profiler,user_validation WHERE date_profiler.id=user_validation.uid AND user_validation.validupto > 'now_time' AND date_profiler.fyn = '1' AND date_profiler.aktiveret ='1' AND date_profiler.kon = '$_GET[kon]' ORDER by RAND()");
    }       
   
    $antal = mysql_num_rows($ProfilQuery);
    if($antal == 0) {
    ?>
--------------
Avatar billede arne_v Ekspert
05. august 2009 - 21:55 #3
Jeg tror at dit performance problem kan løses ved at sætte de rigtige index på.

Det er nemt i PHPMyAdmin eller et andet værktøj.

I ren SQL er det CREATE INDEX kommandoen.
Avatar billede arne_v Ekspert
05. august 2009 - 21:56 #4
Jeg mener ikke at det er en god tabvel struktur at have en kolonne per region.

Men det giver kun en enorm lang PHP kode - det ødelægger ikke din database performance.
Avatar billede gjessing Nybegynder
05. august 2009 - 22:12 #5
Hej Arne
men hvor skal der mon laves index - jeg er helt ny og ved ikke hvor det kunne være
Avatar billede arne_v Ekspert
05. august 2009 - 22:17 #6
Lav det på alle de felter som du sammenligner i dine WHERE betingelser.
Avatar billede gjessing Nybegynder
05. august 2009 - 22:38 #7
Det ser ud til det er lavet - er det ikke rigtigt

Nøglenavn      Datatype      Kardinalitet      Handling      Feltnavn
PRIMARY     PRIMARY     2037      Ret     Slet     id
jylland     INDEX     1      Ret     Slet     jylland
sjalland     INDEX     1      Ret     Slet     sjalland
fyn            INDEX     1      Ret     Slet     fyn
kbh        INDEX     1      Ret     Slet     kbh
arhus        INDEX     1      Ret     Slet     arhus
kon             INDEX     7      Ret     Slet     kon
brugernavn     INDEX     2037      Ret     Slet     brugernavn
kodeord     INDEX     2037      Ret     Slet     kodeord
profilbillede     INDEX     1018      Ret     Slet     profilbillede
Avatar billede arne_v Ekspert
06. august 2009 - 03:19 #8
Jo.

Har user_validation index på uid og validupto ?

Hvor mange rækker returnerer queries ?

Er der nogen meget lange felter i de tabeller ?
Avatar billede arne_v Ekspert
13. september 2009 - 03:38 #9
Kommet videre ?
Avatar billede gjessing Nybegynder
28. februar 2012 - 10:28 #10
Lukker
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
Computerworld tilbyder specialiserede kurser i database-management

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