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?
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
12. februar 2005 - 21:49
#1
Det kan da ikke passe, at man slet ik kan undersøge hvor meget ens data fylder!?
12. februar 2005 - 22:06
#2
Naturligvis kan du det.
12. februar 2005 - 22:06
#3
Oki, men hvordan?
12. februar 2005 - 22:07
#4
$result = mysql_query("SHOW TABLE STATUS FROM database LIKE 'tabel'");
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.
12. februar 2005 - 22:10
#6
Hvad skal man skrive i stdet for 'tabel?
12. februar 2005 - 22:11
#7
tabellens navn
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?
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
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.
12. februar 2005 - 22:20
#11
Det er altså ikke noget du kan klare? :(
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?
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'");
12. februar 2005 - 22:30
#14
Men du kan altså ikke fortælle mig, hvordan jeg kan gøre det jeg vil?
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;
12. februar 2005 - 22:33
#16
Er det så byte, den værdi jeg får ud? Så $size/1000 er altså KB?
12. februar 2005 - 22:33
#17
size/1024 helt præcis.
12. februar 2005 - 22:38
#18
Er det en værdi jeg kan regne med?
12. februar 2005 - 22:38
#19
Men i databasen fylder det reelt mere, da den afsætter extra plads til fx VARCHAR typer.
12. februar 2005 - 22:42
#20
Så nej, du kan ikke regne med det er det egentlige forbrug i databasen, kun datastørrelsen.
12. februar 2005 - 22:42
#21
Oki, tak. Gider du smide et svar?
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.
12. februar 2005 - 22:47
#23
Men eksempelvis et VARCHAR felt på 64 bytes, fylder 64 byte uanset hvad der står i det.
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.
13. februar 2005 - 00:24
#25
Hvilken metode vil du mene er den mest korrekte?
14. februar 2005 - 00:42
#26
Jeg tror de giver det samme resultat.
14. februar 2005 - 07:21
#27
Tak for hjælpen
Computerworld tilbyder specialiserede kurser i database-management