Newsgroup: it.comp.www.php
Titolo: scegliere il tipo di dati in SQL

Salve,
    alcune domande sulla scelta del tipo di dati di una tabella
1) Che vantaggio ho ad usare ad esempio un CHAR(128) anzichč un
VARCHAR(128)? quest'ultimo occupa al massimo un byte in piů ed inoltre si ha
un risparmio considerevole di spazio quando la stringa č piů corta del
massimo.
2) Se a priori non si sa la lunghezza di un campo di testo, mi conviene
usare un VARCHAR(255) oppure č sempre meglio limitare il valore al minimo
possibile? cosa mi cambia (se non la lunghezza massima del testo) scegliere
diversi valori di VARCHAR?
Forse quando si carica in memoria la tabella questa occupa quanto la massima
dimensione di ogni campo specificato? ...mi sembra assurdo.
3) Ho dei degradi di performance ad usare TEXT anziche VARCHAR?
4) OT rispetto all'oggetto del post: con MySQL + PHP + Unix Freebsd + Apache
+ PIII a 800MHZ e 512 MB di ram con quanti record potrei iniziare ad avere
problemi con una  tabella in cui ogni record occupa mediamente 400byte? Ce
la farei a gestire senza troppi problemi 10000 record? (10MB).
Grazie 1000!

 (10MB).
Detta cosi`, dovresti farcela tranquillamente anche con 1 o 2 ordini di
grandezza di piu`. Se ci sono riferimenti incrociati, query complesse o
roba simile... dipende. :)
Bye.

la farei a gestire senza troppi problemi 10000 record? (10MB).
Spero che tu stia scherzando.
aspera=> SELECT COUNT(*) FROM darine;
 count
--------
 520567
(1 row)
malkuth:~ # du -sk /var/local/pgsql/data/base/22512
423120  /var/local/pgsql/data/base/22512
...la tabella 'darine' dovrebbe occupare sui duecento mega, piu' o meno.
Gira su un Celeron 300 MHz con 128 Mb di RAM <grin>.
(Linux e PostgreSQL, ma piu' o meno...)
Leonardo
-- 
".signature": bad command or file name


grazie 1000 di questa info, mi sarà molto utile :)


dicevo 10.000 record, ma su quella tabella vengono fatti ordinamenti più
query incrociate con altre 3 tabelle contemporaneamente.
Comunque grazie delle importanti info

query incrociate con altre 3 tabelle contemporaneamente.
Mah. La query piu' complicata che gira su quell'affare, non ci sta in
una schermata 80x25 :-)
(lunedi' magari la posto ;-) )
Soffre un po', ma la soddisfa in un paio di secondi.


 sui dati nelle colonne successive a quella con il varchar.
Scusa, ma come fai a dirlo in generale? Cioe'..voglio dire, dipende
da come il db mette i dati sul disco, no?
-- 
Ciao,           | Sostituisci "dontspam" con "softhome"
 Francesco      | nell'indirizzo email per avere quello corretto

 come il db mette i dati sul disco, no?
Vabbe, niente si puo` dire in generale quando si parla di db. Ci sono una
infinita` di modi di salvare i dati, dal file gdbm alla partizione
dedicata.
In linea di massima, se le colonne sono fisse, il db sa a che colonna
iniziare la ricerca di un dato, se sono variabili deve "scannare" tutta
la riga per trovare la stringa cercata.
Se poi il db salva una colonna per file, indicizzate per righe, allora le
prestazioni sono uguali, ma lo voglio vedere a gestire la lettura da
(magari) 200 file contemporaneamente.
Se invece il db salva le colonne come lunghezza massima anche quando le
dichiari varchar(), allora tanto vale usare char(). :)
Bye.