Avatar billede lsskaarup Nybegynder
02. marts 2005 - 09:40 Der er 38 kommentarer og
1 løsning

Performance, konvertering af tinytext kontra/til int

Ja, det er faktisk flere spørgsmål i et, med de hænger meget tæt sammen. Så jeg giver 30 point pr. spørgsmål.

Og jeg kan ikke argumentere for valget af felttyper, da jeg ikke har udarbejdet db'en, kun overtaget den fortsatte udvikling.

1) Jeg har en query, som bl.a. summerer den sammen pris hver måned for alle tilbud. Problemet er at denne query, tager uforholdsmæssigt lang tid ca. 40s-60s og db'en bliver jo kun størrere. Jeg har så lagt index, på felterne i where-delen uden den helt store forbedring. Men via tests, både med og uden SUM-delen, kører det hurtigt nok, hvis den ikke er med. Derfor må jeg jo konkludere at problemet må skyldes summeringen. Feltet som indeholder det enkelte tilbuds samlede pris, er af typen tinytext. Jeg har så den teori, at lave en SUM(tinytext) tager vildt lang tid, i forhold til hvis feltet havde været af typen Int, altså SUM(INT). Men passer det?

2) Afhænger af svaret på punkt 1, men er INT meget hurtigere, så skal jeg jo måske have konvereteret feltet, problemet er så bare, at db'en jo indeholder arbejdsdata, som absolut ikke må blive slettet. Hvad vil der ske ved en konvertering, vil jeg miste data?
Avatar billede arne_v Ekspert
02. marts 2005 - 09:43 #1
re 1)

ja det lyder meget rigtigt

re 2)

det bør være muligt at lave en konvertering via en midlertidig tabel
Avatar billede detox Nybegynder
02. marts 2005 - 09:46 #2
Jeg vil tro at heltal er det absolut hurtigste at summere og så er en backup inden konvertering nok en god ide.
Avatar billede lsskaarup Nybegynder
02. marts 2005 - 09:50 #3
Jeg er ikke helt vild med at skulle konvertere via en midlertidig tabel, tror I data vil bliver ændret, hvis jeg bare f.eks. via phpmyadmin ændre typen.

Selvfølgelig skal jeg have taget backup, jeg ville sådan set også bare lige tjekke, og især gerne høre fra nogle som har foretaget en konvertering, faldgruber o.l.
Avatar billede lsskaarup Nybegynder
02. marts 2005 - 09:53 #4
For problemet ligger vel i hvordan db'en håndtere data i felttyperne ikke selve data?
Avatar billede arne_v Ekspert
02. marts 2005 - 09:54 #5
Jeg vil helt klart mene at:
  - select med konvertering fra RIGTIG til MIDLERTIDIG
  - check MIDLERTIDIG
  - drop RIGTIG
  - select at fra MIDLERTIDIG TIL RIGTIG
  - drop RIGTIG
er en low risk løsning
Avatar billede detox Nybegynder
02. marts 2005 - 09:58 #6
Jeg vil tro at du kan ændre felttypen i phpMyAdmin uden problemer, bare husk backup.
Avatar billede arne_v Ekspert
02. marts 2005 - 09:58 #7
Data skal også konverteres.
Avatar billede lsskaarup Nybegynder
02. marts 2005 - 09:58 #8
Okay, men hvordan skal det så eventuelt gøres?
Avatar billede lsskaarup Nybegynder
02. marts 2005 - 10:00 #9
Jeg har lige prøvet at ændre typen på en test-db jeg har, og der gik det uden problemer. Test-db'en indeholder bare langt fra så mange data som drifts-db'en, men jeg vil så resten af dagen, holde øje med, om det har indflydelse på noget andet.
Avatar billede detox Nybegynder
09. marts 2005 - 08:40 #10
Hvordan går det så?
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 09:19 #11
Jeg skal lave en test på driften i eftermiddag/aften, så der ved jeg sikkert mere, men på test-db'en har der ikke været problemer, selvom jeg bare ændrede datatypen via phpmyadmin, så det vil jeg også prøve på driften.

Men jeg skal nok vende tilbage, når jeg ved noget mere.
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 17:40 #12
Desværre er det vist med et nedslående resultat jeg vender tilbage. Det har ikke hjulpet synderligt meget at konverterer den.

Så nu håber jeg I har nogle andre muligheder, eventuelt en smartere måde at få resultatet på.
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 17:40 #13
Jeg er næsten åben for alt
Avatar billede detox Nybegynder
09. marts 2005 - 17:51 #14
Sådan en forespørgsel burde da ikke tage mange millisekunder. Måske er det WHERE delen det er galt med. Hvordan ser selve forespørgslen egentlig ud?
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 17:53 #15
Uha, der er flere af dem, jeg lister dem lige op efterfølgende. En anden mærkelige ting, er også at den ikke returnere noget, andet end en query. Men på testdb'en kan den godt returnere en oversigt.
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 17:53 #16
Du får lige hele koden

<?php
    require('system/global_defs.php');
   
    include('static/kunde.php');

    setlocale(LC_ALL, 'da_DK');

    // TOTAL STATISTIK
    if (isset($_POST['submitTotal'])) {
        $titel = "DS Spærsalg";
        $where = "";
    }

    // GEOGRAFISK STATISTIK
    else if (isset($_POST['submitGeografi'])) {
        $titel = $_POST['land'];
        if ($_POST['land'] != "Øvrige") {
            $where = "&& land = '" . $_POST['land'] . "'";
        }
        else {
            $where = "&& land NOT IN ('" . implode("','", $GEOGRAFI) . "') ";
        }
    }


    $year = $_POST['regnskabsaar'];
    list($startdato,$slutdato) = explode("-", $year);
    $startdato = $startdato ."-07-01";
    $slutdato = $slutdato ."-07-01";

    $skema = array();
    $skema[0][0] = "<td rowspan=\"2\">Måned</td>";
    $skema[0][1] = "<td rowspan=\"2\">Antal ordrer</td>";
    $skema[0][2] = "<td rowspan=\"2\">Ordresum</td>";
    $skema[0][3] = "<td rowspan=\"2\">Stålpris</td>";
    $skema[0][4] = "<td rowspan=\"2\">Tonnage kg</td>";
    $skema[0][5] = "<td rowspan=\"2\">Kr./kg</td>";
    $skema[0][6] = "<td rowspan=\"2\">Fortjeneste</td>";
    $skema[0][7] = "<td rowspan=\"2\">DB %</td>";
    $skema[0][8] = "<td rowspan=\"2\">Budget tkr</td>";
    $skema[0][9] = "<td rowspan=\"2\">Budgetafv. tkr.</td>";
    $skema[0][10] = "<td colspan=\"2\">Hitrate %</td>";
    $skema[1][0] = "<td>Ordre</td>";
    $skema[1][1] = "<td>Oms.</td>";


$sql = "SELECT month(r2) as maaned, count(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud

GROUP BY tilbud) as t, tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud &&

t.rev = tilbud.rev && tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r4 >=

'$startdato' && r4 < '$slutdato' $where GROUP BY maaned ORDER BY maaned";

$res = mysql_query($sql) or die($sql);
while ($row = mysql_fetch_row($res)) {
  $tilbud[$row[0]]['antal'] = $row[1];
  $tilbud[$row[0]]['sum'] = $row[2];
}

// Finder de nødvendige data til tabellen
// $sql = "SELECT month(oprettet) as maaned, count(*) as antal, sum(r504) as ordresum, sum(r477a) as staalpris, sum(r477) as

tonnage, sum(r503) as fortjeneste, avg(r502) as db, 'test' as budget, 'test' as budgetafv FROM ordre, ordre0, ordre4, ordre5

LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE ordre.id = ordre0.tilbudsnummer && ordre0.tilbudsnummer =

ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer && oprettet >= '$startdato' && oprettet < '$slutdato'

$where GROUP BY maaned ORDER BY oprettet";

$sql = "SELECT month(r2) as maaned, count(*) as antal, sum(r504) as ordresum, sum(r477a) as staalpris, sum(r477) as tonnage,

avg(r509) as krkg, sum(r503) as fortjeneste, avg(r502) as db, 'test' as budget, 'test' as budgetafv FROM (SELECT ordre,

MAX(rev) as rev FROM ordre GROUP BY ordre) as o, ordre, ordre0, ordre4, ordre5 LEFT JOIN kunde ON kunde_hidden = kunde.id

WHERE o.ordre = ordre.ordre && o.rev = ordre.rev && ordre.id = ordre0.tilbudsnummer && ordre0.tilbudsnummer =

ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato' &&

(ordre5.r534b !='1'|| ordre5.r534b IS NULL) $where GROUP BY maaned ORDER BY maaned";

//die($sql);

$res = mysql_query($sql) or die($sql);

$ordresum = array();
while ($row = mysql_fetch_array($res)) {
//while ($row = mysql_fetch_row($res)) {
if ($row['maaned'] > 6) {
    $maaned = $row['maaned']-5;
} else {
    $maaned = $row['maaned'] + 7;
}
$ordresum[$maaned] = $row[2];

//Formatering af værdier derefter input til skema-arrayet
for($i = 0; $i < count($row); $i++) {
      if ($i == 0) {//Navnet må måned
        $skema[$maaned][$i] = "<td>" . ucfirst(strftime("%b", mktime(0,0,0,$row[$i], 1, 2000))) . "</td>";
        } else if (($i >= 2 && $i <=4) || $i == 6) {//ordresum, staalpris, tonnage og fortjeneste
        $skema[$maaned][$i] = "<td>" . number_format($row[$i], 0, '', '.') . "</td>";
        } else if ($i == 5) {//krkg
       
        //Hvis der skulle være en ordre, som ikke har fået nogle konstruktioner endnu, og der køres en statistik,

kommer fejlen division med 0, fordi der simpelthen ikke er nogle tonnage endnu.
        if($row[4]==0){
            $row[4]=1;
        } else {
            $row[4]=$row[4];
        }

        $skema[$maaned][$i] = "<td>" . number_format($row[3]/$row[4], 2, ',', '') . "</td>";//Stålpris divideret med

tonnage
        } else if ($i == 7) {//db
        $skema[$maaned][$i] = "<td>" . number_format($row[$i], 1, ',', '.') . "</td>";
    } else {//antal, budget tkr, budgetafv. tkr, hitrate
        $skema[$maaned][$i] = "<td>" . $row[$i] . "</td>";
    }
  }

  //Formatering og udregning af hitrate
  if ($tilbud[$row[0]]['antal'] == 0) {
    $skema[$maaned][10] = "<td>0,0</td>";
  } else {
    $facit = $row[1]*100/$tilbud[$row[0]]['antal'];
    $skema[$maaned][10] = "<td>" . number_format($facit, 1, ',', '.') . "</td>";
  }
  //if ($row[2] == 0) $skema[$maaned][11] = "<td>0,0</td>";
  //else $skema[$maaned][11] = "<td>" . ($tilbud[$row[0]]['sum']*100/$row[2]) . "</td>";
  if ($tilbud[$row[0]]['sum'] == 0) {
    $skema[$maaned][11] = "<td>0,0</td>";
  } else {
    $facit = $row[2]*100/$tilbud[$row[0]]['sum'];
    $skema[$maaned][11] = "<td>" . number_format($facit, 1, ',', '.') . "</td>";
  }
}

$budgetsql = "SELECT MONTH(maaned) as maaned, SUM(`sum`) as sum FROM budgetordre WHERE maaned >= '$startdato' && maaned <

'$slutdato' $where GROUP BY maaned ORDER BY maaned";
$res = mysql_query($budgetsql) or die($budgetsql);
while ($row = mysql_fetch_assoc($res)) {
    if ($row['maaned'] > 6) {
        $maaned = $row['maaned']-5;
    } else {
        $maaned = $row['maaned'] + 7;
    }
    $skema[$maaned][8] = "<td>" . number_format($row['sum'], 0, '', '.') . "</td>";
//$skema[$maaned][8] = "<td>" . $row['sum'] . "</td>";
    $skema[$maaned][9] = "<td>" . number_format($ordresum[$maaned]-($row['sum']*1000), 0, '', '.') . "</td>";
}




$sql = "SELECT count(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud GROUP BY tilbud) as t,

tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud && t.rev = tilbud.rev &&

tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato'

$where";
$res = mysql_query($sql) or die($sql);;
list($tilbud_antal, $tilbud_sum) = mysql_fetch_row($res);
// Finder total værdierne
// $sql = "SELECT 'Total', count(*) as antal, sum(r504) as ordresum, sum(r477a) as staalpris, sum(r477) as tonnage, avg(r509)

as krkg, sum(r503) as fortjeneste, avg(r502) as db, 'test' as budget, 'test' as budgetafv, 'test' as ordreprocent, 'test' as

omsprocent FROM ordre, ordre0, ordre4, ordre5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE ordre.id =

ordre0.tilbudsnummer && ordre0.tilbudsnummer = ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer &&

oprettet >= '$startdato' && oprettet < '$slutdato' $where";


// udtræk af total
$sql = "SELECT 'Total', count(*) as antal, sum(r504) as ordresum, sum(r477a) as staalpris, sum(r477) as tonnage, avg(r509) as

krkg, sum(r503) as fortjeneste, avg(r502) as db, 'test' as budget, 'test' as budgetafv, 'test' as ordreprocent, 'test' as

omsprocent FROM (SELECT ordre, MAX(rev) as rev FROM ordre GROUP BY ordre) as o, ordre, ordre0, ordre4, ordre5 LEFT JOIN kunde

ON kunde_hidden = kunde.id WHERE o.ordre = ordre.ordre && o.rev = ordre.rev && ordre.id = ordre0.tilbudsnummer &&

ordre0.tilbudsnummer = ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer && r4 >= '$startdato' && r4 <

'$slutdato' $where";

$res = mysql_query($sql) or die($sql);

$row = mysql_fetch_row($res);
$ordre_antal = $row[1];
$ordre_sum = $row[2];
//Fomratering af total linien, se eventuelt formateringen af de andre rækker
for($i = 0; $i < count($row); $i++) {
  if (($i >= 2 && $i <=4) || $i == 6) {
    $row[$i] = number_format($row[$i], 0, '', '.');
  } else if ($i == 5) {
    $row[$i] = number_format($row[$i], 2, ',', '');
  } else if ($i == 7) {
    $row[$i] = number_format($row[$i], 1, ',', '.');
  }
  $skema[14][$i] = "<td>" . $row[$i] . "</td>";
}

if ($tilbud_antal == 0) {
    $skema[14][10] = "<td>0,0</td>";
} else {
  $facit = $ordre_antal*100/$tilbud_antal;
  $skema[14][10] = "<td>" . number_format($facit, 1, ',', '.') . "</td>";
}
//if ($row[2] == 0) $skema[14][11] = "<td>0,0</td>";
//else $skema[14][11] = "<td>" . ($tilbud_sum*100/$row[2]) . "</td>";
if ($tilbud_sum == 0) {
    $skema[14][11] = "<td>0,0</td>";
} else {
  $facit = $ordre_sum*100/$tilbud_sum;
  $skema[14][11] = "<td>" . number_format($facit, 1, ',', '.') . "</td>";
}

$budgetsql = "SELECT SUM(`sum`) as sum FROM budgetordre WHERE maaned >= '$startdato' && maaned < '$slutdato' $where";
$res = mysql_query($budgetsql) or die($budgetsql);
list($totalbudget) = mysql_fetch_row($res);
$skema[14][8] = "<td>" . number_format($totalbudget, 0, '', '.') . "</td>";
$skema[14][9] = "<td>" . number_format($ordre_sum-($totalbudget*1000), 0, '', '.') . "</td>";

?>

<html>
<head>
<title>Årsopgørelse for <?php echo $titel; ?></title>
</head>
<body>
<h1>Årsopgørelse for <?php echo $titel; ?></h1>
<h2>for regnskabsåret <?php echo $year; ?></h2>
<table border="1">
<?php

    for ($i = 0; $i < count($skema); $i++) {
        echo "<tr>\n";
        for ($j = 0; $j < 12; $j++) {
            if ($i == 0 && $j == 10) {
                $j == 12;
            }
            if ($i == 1 && $j == 1) {
                $j == 12;
            }
            if (!isset($skema[$i][$j]) && $i > 1) {
                echo "<td>&nbsp;</td>";
            }
            echo $skema[$i][$j] . "\n";
        }
        echo "</tr>\n";
    }
?>

</table>
<p>
<input type="button" onClick="window.print();" value="Print">
</p>
</body>
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 17:58 #17
Og der er index på følgende felter: ordre5/tilbud5.tilbudsnummer, ordre5.r504, ordre4/tilbud4.tilbudsnummer, tilbud3.tilbudsnummer, tilbud2.tilbudsnummer, tilbud1.tilbudsnummer, ordre0/tilbud0.tilbudsnummer, ordre0.r4, ordre.ordre og ordre.rev

Har jeg overset nogen i where delen?
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 17:59 #18
Nå jeg tager hjem nu, så jeg kan ikek teste mere resten af aften, men kan måske svare på nogle spørgsmål
Avatar billede detox Nybegynder
09. marts 2005 - 18:41 #19
Ja, det var en ordentlig omgang. Det virker nu ikke særligt tillidsvækkende at den ikke returnerer det samme på de 2 maskiner. Det var måske værd at sætte:
error_reporting(E_ALL);
for at afsløre evt. fejl.
Men det må være et must at indkredse synderen, altså den tidskrævende forespørgsel, evt. ved at teste en ad gangen.
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 20:08 #20
Nu kan jeg ikke med 100% sikkerhed huske hvilke det er, men det drejer sig om 2. Jeg kan i hvert fald huske, at jeg testede af en query, både med og uden sum(r504), og uden kørte den hurtigst nok, men med GAAAAB hvor langsomt. Hvilket også var grunden til at jeg undersøgte db'en, og så slog det mig, at int burde være hurtigere at beregne på end tinytext.

Den der error_reporting(E_ALL) skal den i stedet for die eller hva?
Avatar billede lsskaarup Nybegynder
09. marts 2005 - 20:19 #21
Jeg glemte at sige, at så vidt jeg ved køre databasen på en terminal-server, og selvfølgelig har det noget at sige, men hvor meget i forhold til en dedikeret database-server?
Avatar billede lsskaarup Nybegynder
10. marts 2005 - 08:08 #22
Okay, jeg har nu fundet ud af at error_reporting skal sættes i php.ini, men det er den godt nok flere gang, men jeg er heller ikke så vild, for at skulle ændre i den.
Avatar billede lsskaarup Nybegynder
10. marts 2005 - 10:02 #23
Okay de 2 querys som trækker tænder ud af systemet:

1)
SELECT month(r2) as maaned, count(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud GROUP BY tilbud) as t, tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud && t.rev = tilbud.rev && tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato' $where GROUP BY maaned ORDER BY maaned

2)
SELECT count(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud GROUP BY tilbud) as t, tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud && t.rev = tilbud.rev && tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato' $where

Begge 2 er dog hurtige nok (ca. 1 sek.), hvis jeg fjerner sum(r504) as sum, hvilket også var grunden til, at jeg tænkte at en konvertering måske kunne gøre det.
Avatar billede detox Nybegynder
10. marts 2005 - 18:16 #24
Du kan nu godt sætte:

error_reporting(E_ALL);

i dit script. Se:
http://dk2.php.net/manual/en/function.error-reporting.php

Det er bare ment som et midlertidigt tiltag for at sikre dig at der ikke er fejl i selve scriptet, da du jo ikke for returneret det samme som fra din test-db.

Da du har felttypen INT og index på feltet, er jeg ikke sikker på hvad du så skal stille op.
Der er nogle forskellige ting du kan prøve, bl.a. EXPLAIN syntax for at sikre dig at der er index på alle de rigtige felter. Og måske prøve med en sortering af dine index, det står beskrevet her:
http://dev.mysql.com/doc/mysql/en/select-speed.html

Derudover kan du tage et kig på server optimering:
http://dev.mysql.com/doc/mysql/en/optimizing-the-server.html
Avatar billede lsskaarup Nybegynder
11. marts 2005 - 08:11 #25
Øh, error_reporting(E_ALL) gør ikke rigtigt noget, i hvert fald ikke i forhold til scriptet uden error. Man skal ikke sige echo ligger lignede til det, vel?
Avatar billede detox Nybegynder
11. marts 2005 - 11:26 #26
Jamen så er der hvertfald ikke noget galt med selve scriptet. Det var bare for at tjekke at der ikke var nogle småfejl, ift. at du ikke får de samme resulatater returneret som fra din testdb.
Avatar billede lsskaarup Nybegynder
11. marts 2005 - 11:56 #27
Kan det være fordi scriptet simpelthen tager for lang tid at eksekvere?
Men så burde den vel komme med en fejlmeddelelse om at executiontime er udløbet?
Avatar billede detox Nybegynder
11. marts 2005 - 12:07 #28
Ja, det vil udløse en fatal error.
Avatar billede lsskaarup Nybegynder
11. marts 2005 - 13:35 #29
Så den fatal error, behøves ikke at være en fejlmeddelelse der returneres, men også, som i dette tilfælde, også en query-string der returneres
Avatar billede detox Nybegynder
11. marts 2005 - 15:41 #30
Nej, den vil stoppe udførrelsen af scriptet og give dig en melding som du sagde med at executiontime er udløbet.
Jeg kan altså ikke se hvad det er i den SUM() operation, der skulle gøre din forespørgsel SÅ langsom. Hvor store er dine tabeller? Har du prøvet at tjekke dine forespørgsler med EXPLAIN?
Avatar billede lsskaarup Nybegynder
11. marts 2005 - 18:06 #31
ja, hvis der er EXPLAIN via phpmyadmin du mener, men jeg fattede ikke så meget af, men jeg kan da godt ligge det op. Størrelsen på tabellerne kan jeg ikke lige huske, men jeg kan måske tjekke det på min egen maskine.
Avatar billede detox Nybegynder
11. marts 2005 - 18:20 #32
Ja da, lad os prøve at se om der er index på alle dine nøgler, selvom jeg stadig ikke kan se hvorfor netop SUM() gør den så langsom.
Avatar billede lsskaarup Nybegynder
11. marts 2005 - 20:26 #33
Explain giver dette resultat, og på min maskine tog det også ca 60 sek. at udføre queryen.
id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra 
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 1485 Using temporary; Using filesort
1 PRIMARY tilbud5 ALL tilbudsnummer NULL NULL NULL 1707 
1 PRIMARY tilbud0 ref tilbudsnummer tilbudsnummer 4 test_kompetence.tilbud5.tilbudsnummer 1 Using where
1 PRIMARY tilbud eq_ref PRIMARY PRIMARY 3 test_kompetence.tilbud0.tilbudsnummer 1 Using where
1 PRIMARY kunde eq_ref PRIMARY,id PRIMARY 2 test_kompetence.tilbud0.kunde_hidden 1 Using index
2 DERIVED tilbud ALL NULL NULL NULL NULL 1707 Using temporary; Using filesort
Avatar billede lsskaarup Nybegynder
11. marts 2005 - 20:45 #34
Og den returnerer dette resultat.
maaned antal sum
  1    509  90298942
  2    727  120129178
  3    243  33432385
Avatar billede lsskaarup Nybegynder
11. marts 2005 - 21:12 #35
Hov, nu har jeg sgu fundet den tror jeg nok. Jeg prøvede lige at sætte index på alt, hvad der var muligt at sætte index på, og så kørte den hurtigt nok. Testede mig så lidt frem til at det er Tilbud.tilbud, som er skyld i miseren.

Men vi må lige vente til på mandag, så jeg kan teste det på arbejde.
Avatar billede detox Nybegynder
12. marts 2005 - 11:31 #36
Jamen det lyder jo rimeligt, det bliver så spændende om det løser problemet ;O)
Avatar billede lsskaarup Nybegynder
14. marts 2005 - 10:11 #37
YES, det fik virkelig fjernet en sten fra mit bryst, det virke sgu, og håber det også bliver ved med det.

Nå men detox, du skal da have point, og du havde jo også ret i at det ikke var funktionen SUM(), som forudsagede den kritiske hastighed, selvom jeg troede det var den.
Avatar billede detox Nybegynder
14. marts 2005 - 18:09 #38
Godt du slap af med flaskehalsen der :O)
Avatar billede lsskaarup Nybegynder
14. marts 2005 - 20:04 #39
Ja, brugerne er også pludselig blevet helt vilde med, at køre statistiker over sig selv, så de bl.a. kan se hvor meget de har solgt for
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