![]() |
[MySQL] Grote van database berekenen...
Ik ben al een tijdje over aan het nadenken, maar kan geen echt effectieve manier bedenken voor het volgende probleem..
Ik heb een database met iets als zo: Code:
id | pid | title | text "TABLE STATUS" kan helaas alleen de formaten van tabellen terug geven, maar ik wilde van de regels afzonderlijk weten. |
iets in de zin van select * from blaat where pid=3
en alle tekens tellen, en dan weet je hoeveel bytes je hebt |
Citaat:
Maar is ver weg van prettige oplossing.. Het gaat namelijk om +/- 50 verschillende tabellen ;) |
datatypes opvragen en bij varchars gemiddelden nemen.
|
Citaat:
|
kent MySQL geen gemiddelde functie? (zoja: aantal rows*gemiddelde lengte=size) Dan is duurt het nog even voordat je query klaar is...
|
Zoals ik al zei, de regels verschillen van grote..
Er is dus geen gemiddelde te berekenen... |
de regels kunnen niet wisselen van grootte; je hebt per regel een maximale grootte (=max van alle datatypen).
int + int + varchar(30 ) = 34 bytes max per regel. |
En wat als er velden als type 'text' zijn, en de ene regel 2 woorden bevat, en de volgende 200.
:) Overigens is de berekening maar 1x per dag op een nachtelijk tijdstip. |
als het goed is, een een text max 4 bytes in de tabel. De database maakt een apart bestand waar de inhoud van de text wordt opgeslagen (met een 4-byte adres).
|
En jji denkt dat een HTTP account access heeft tot de MySQL bestanden? :p
|
Citaat:
|
Citaat:
|
Citaat:
|
Klein beetje hulp:
http://dev.mysql.com/doc/mysql/en/st...uirements.html Citaat:
Citaat:
http://dev.mysql.com/doc/mysql/en/st...-overview.html Citaat:
|
Hoe de manier van opslaan is wist ik al.
Ik zoek alleen een efficiente manier om het uit te lezen ;) (Of begrijp ik de hint niet?) |
Citaat:
phpMyAdmin kan toch ook de grootte van de (inhoud van de) tabel uitlezen? |
Citaat:
|
Citaat:
Je wilt het gegroepeerd per pid, toch? Als je weet hoe phpMyAdmin het doet, kun je het toch ook zelf maken :confused: Enniewees, wat je ook kunt doen is alle kolommen omzetten naar tekst en daar de lengte van bepalen (=aantal bytes). Integers moet je dan omzetten naar hex-waarden. |
Kolommen wijzigen is helaas geen optie.
Grouperen inderdaad per 'pid'. Maar het formaat per 'pid' wil ik graag weten, niet de totale tabel formaat. |
De grote database
De grootte van een database ;) |
Citaat:
select sum( 4 + 4 + len( title ) + len( text ) ) from tabel group by pid |
Dat valt dus niet onder effectief.
Dan moet ik voor ieder tabel apart de tabel apart die query maken en uitlezen.. (50 tabellen * 25 cellen * 5000 regels+oplopend) De reden van dit topic is juist om tot een echte oplossing te komen en niet iets als wat jij zegt, want dat had ik zelf ook al bedacht ;) Allres regel voor regeld uitlezen is echt de aller laatste optie :) |
Citaat:
- functies om alle tabellen op te vragen uit een database - functies om alle kolommen (inclusief type en lengte) op te vragen van een tabel Combineer de bovenste twee en bouw een dynamisch statement. |
dat kan table status wel..
maar ik vind het allemaal toch niet echt effectief :p |
Ja, hallo, je kan wel zoveel niet effectief vinden. Ik gok dat er geen andere oplossingen zijn dan degenen die er tot nu toe zijn aangedragen. Je probleem is dat je aan de hand van gegevens IN een tabel gegevens OVER die tabel probeert te bepalen; daar is SQL simpelweg niet op berekend. Het is een abstraction, en hoewel bij tijd en wijle leaky is het ook weer niet zo leaky. Je zult dus genoegen moeten nemen met de opties die tot nu toe zijn voorgesteld, of je moet gewoon (en dat is misschien verstandiger) de verschillende dingen met een ander gid in een andere table of zelfs in een andere database opslaan.
|
De beste optie (denk ik) is niet gegeven, heb op t.net ook even een topic geplaatst en daar kwam iemand met het geniale idee om gebruik te maken van INSERT INTO en dan dus een tijdelijke tabel te gebruiken met als voorwaarde de 'pid'.
Je hoeft dan alleen het formaat van de tijdelijke tabel uit te lezen, daarna leeg je die gewoon weer :) Ik heb het nog niet in praktijk getest, maar dat ga ik later vandaag maar eens doen... Indien iemand nog suggesties heeft hoor ik het graag. En anders, bedankt voor het meedenken :) |
Citaat:
En voor de geintereseerde: http://dev.mysql.com/doc/mysql/en/st...uirements.html |
Van de ongeveer 870kb die de database bevat (volgens phpMyAdmin -> show) krijg ik maar 730kb geteld..
Iets gaat er nog niet goed :'( |
Mogelijkerwijs mis je de indices? Check even hoe groot de .FRM, .MYD en .MYI files zijn. Het zou best kunnen dat je hiermee alleen de .MYD file hebt.
|
Citaat:
Maar ik ben net achter gekomen dat een aantal vars leeg zijn die gewoon gevuld moeten zijn... Dus er zit nog een query fout :) Edit: ik mis van iedere tabel een aantal b's :| Edit2: het gaat overigens over MySQL3 (helaas niet 4). |
Ik miste trouwens inderdaad de indices :)
|
Alle tijden zijn GMT +1. Het is nu 23:41. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.