Avatar billede dennism Nybegynder
12. februar 2005 - 21:30 Der er 26 kommentarer og
1 løsning

mySQL: størrelse i byte

Hvis jeg f.eks. laver et kald som dette:

$result = mysql_query("SELECT * FROM message");

Hvordan kan jeg så finde ud af, hvor mange byte (evt. KB) at mine data fylder?
Avatar billede dennism Nybegynder
12. februar 2005 - 21:49 #1
Det kan da ikke passe, at man slet ik kan undersøge hvor meget ens data fylder!?
Avatar billede detox Nybegynder
12. februar 2005 - 22:06 #2
Naturligvis kan du det.
Avatar billede dennism Nybegynder
12. februar 2005 - 22:06 #3
Oki, men hvordan?
Avatar billede detox Nybegynder
12. februar 2005 - 22:07 #4
$result = mysql_query("SHOW TABLE STATUS FROM database LIKE 'tabel'");
Avatar billede detox Nybegynder
12. februar 2005 - 22:10 #5
$row = mysql_fetch_assoc($result);

Så ligger datastørrelsen i: $row['Data_length'] og
Index størrelsen i $row['Index_length']
De to ligger du sammen for at få den samlede størrelse.
Avatar billede dennism Nybegynder
12. februar 2005 - 22:10 #6
Hvad skal man skrive i stdet for 'tabel?
Avatar billede detox Nybegynder
12. februar 2005 - 22:11 #7
tabellens navn
Avatar billede dennism Nybegynder
12. februar 2005 - 22:11 #8
Hvad er index_lenght?

Jeg er nemlig ved at lave en system hvor man kan rydde op i gamle poster i databasen, og derfor er det vel kun data_length der skal med?
Avatar billede dennism Nybegynder
12. februar 2005 - 22:17 #9
Jeg har denne kode:

$database1 = mysql_query("SHOW TABLE STATUS FROM drlunddb LIKE message WHERE enddate < '$date'");
$database1_row = mysql_fetch_assoc($database1);
echo"$database1_row[Data_length]";

Min database hedder drlunddb, og min tabel hedder "message", men alligevel får jeg følgende fejl:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in cleanup.php on line xx
Avatar billede detox Nybegynder
12. februar 2005 - 22:19 #10
Nu troede jeg du ville have størrelsen af hele tabellen, derfor mit forslag med SHOW TABLE STATUS. Hvis du kun vil have størrelsen af nogle udvalgte rækker, skal der nok en anden metode til.
Avatar billede dennism Nybegynder
12. februar 2005 - 22:20 #11
Det er altså ikke noget du kan klare? :(
Avatar billede dennism Nybegynder
12. februar 2005 - 22:21 #12
Denne kode giver samme fejl:

$database1 = mysql_query("SHOW TABLE STATUS FROM drlunddb LIKE message");
$database1_row = mysql_fetch_assoc($database1);
echo"$database1_row[Data_length]";

Burde den ik virke?
Avatar billede detox Nybegynder
12. februar 2005 - 22:24 #13
$database1 = mysql_query("SHOW TABLE STATUS FROM drlunddb LIKE message");

skal være:

$database1 = mysql_query("SHOW TABLE STATUS FROM drlunddb LIKE 'message'");
Avatar billede dennism Nybegynder
12. februar 2005 - 22:30 #14
Men du kan altså ikke fortælle mig, hvordan jeg kan gøre det jeg vil?
Avatar billede detox Nybegynder
12. februar 2005 - 22:30 #15
Måske du kan regne det ud på den her måde:

$size = 0;
$result = mysql_query("SELECT * FROM message WHERE enddate < '$date'");
while ($row = mysql_fetch_row($result)) {
    foreach ($row as $data) {
        $size += strlen($data);
    }
}

echo $size;
Avatar billede dennism Nybegynder
12. februar 2005 - 22:33 #16
Er det så byte, den værdi jeg får ud? Så $size/1000 er altså KB?
Avatar billede detox Nybegynder
12. februar 2005 - 22:33 #17
size/1024 helt præcis.
Avatar billede dennism Nybegynder
12. februar 2005 - 22:38 #18
Er det en værdi jeg kan regne med?
Avatar billede detox Nybegynder
12. februar 2005 - 22:38 #19
Men i databasen fylder det reelt mere, da den afsætter extra plads til fx VARCHAR typer.
Avatar billede detox Nybegynder
12. februar 2005 - 22:42 #20
Så nej, du kan ikke regne med det er det egentlige forbrug i databasen, kun datastørrelsen.
Avatar billede dennism Nybegynder
12. februar 2005 - 22:42 #21
Oki, tak.

Gider du smide et svar?
Avatar billede detox Nybegynder
12. februar 2005 - 22:45 #22
Et andet eksempel er tal de fylder henholdsvis:

TINYINT 1 Byte
SMALLINT 2 Byte
MEDIUMINT 3 Byte
INT 4 Byte
BIGINT 8 Byte

Uanset tallets størrelse.
Avatar billede detox Nybegynder
12. februar 2005 - 22:47 #23
Men eksempelvis et VARCHAR felt på 64 bytes, fylder 64 byte uanset hvad der står i det.
Avatar billede detox Nybegynder
12. februar 2005 - 23:12 #24
Du kan osse bruge mysql_fetch_lengths():

while ($row = mysql_fetch_row($result)) {
    $len = mysql_fetch_lengths($result);
    foreach ($len as $val) {
        $size += $val;
    }
}

men som sagt bliver der afsat ekstra plads i tabellen.
Avatar billede dennism Nybegynder
13. februar 2005 - 00:24 #25
Hvilken metode vil du mene er den mest korrekte?
Avatar billede detox Nybegynder
14. februar 2005 - 00:42 #26
Jeg tror de giver det samme resultat.
Avatar billede dennism Nybegynder
14. februar 2005 - 07:21 #27
Tak for hjælpen
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