In genere, è più veloce leggere da una tabella in cui non sono memorizzati varchar o altri dati di lunghezza variabile? In MySQL, questo è più veloce perché può calcolare esattamente dove verrà archiviata una riga sul disco.È più veloce leggere le colonne a larghezza fissa in SQLite?
risposta
Questa domanda non è significativa nel contesto di SQLite in quanto supporta solo un singolo tipo di campo TEXT
. La distinzione tra "larghezza fissa" e "lunghezza variabile" non esiste qui.
Mentre SQLite consente di definire un campo con un determinato tipo, tutto questo è (al massimo) imposta la preferenza di quel campo per il tipo da utilizzare quando si memorizzano dati ambigui (ad esempio, se "3" verrà archiviato come INTEGER, REAL, o TEXT). È comunque possibile memorizzare qualsiasi tipo di dati in qualsiasi campo SQLite indipendentemente dal suo tipo.
In particolare in materia di CHAR vs VARCHAR, http://www.sqlite.org/datatype3.html ci dice:
Se il tipo dichiarato della colonna contiene una qualsiasi delle stringhe "char", "CLOB", o "TEXT" allora che la colonna ha l'affinità TEXT . Si noti che il tipo VARCHAR contiene la stringa "CHAR" e viene quindi assegnato affinità TEXT.
Solo dal SQLite uses variable-length records, suppongo che non abbiano implementato l'ottimizzazione della ricerca a larghezza fissa quando le righe hanno la stessa lunghezza.
E come Dave ha sottolineato, si può ancora memorizzare il testo nei campi INT. A partire da SQLite never truncates data, ciò significa che SQLite consente una colonna di larghezza apparentemente fissa come INT per memorizzare anche dati di lunghezza variabile. Quindi è impossibile implementare l'ottimizzazione della ricerca a larghezza fissa.
- 1. Colonne della tabella larghezza fissa in Bootstrap
- 2. Come posso dividere colonne a larghezza fissa in Perl?
- 3. SQLite è davvero più veloce di MySQL?
- 4. Layout fluido con alcune colonne a larghezza fissa
- 5. SQLite: group_concat() più colonne
- 6. - Tabella larghezza 100%, combinazione di colonne a larghezza fissa e UNIFORM
- 7. Panda: istogramma a larghezza fissa
- 8. Numeri interi a larghezza fissa in C++
- 9. SQLite - Il modo più veloce per leggere i dati dal database SQLite?
- 10. Letterali interi a larghezza fissa in C++?
- 11. Android: carattere a larghezza fissa in AlertDialog
- 12. Come leggere BufferedReader più veloce
- 13. Posizione larghezza fissa 100%
- 14. È più veloce modificare più colonne nella stessa query?
- 15. Carrierwave - Ridimensionamento delle immagini a larghezza fissa
- 16. convertire un file a larghezza fissa dal testo in csv
- 17. Styling di un layout di tabella colonne di larghezza fissa e fissa + colspan
- 18. CSS/Flexbox: stessa larghezza dell'elemento più grande, come le colonne
- 19. Il modo più veloce per leggere a lungo [] dal file?
- 20. SQLite Android: quale query ("query" o "rawQuery") è più veloce?
- 21. Quanto veloce è SQLite via Python
- 22. Quanto è veloce Berkeley DB SQL rispetto a SQLite?
- 23. Come posso avere due colonne a larghezza fissa con una colonna flessibile al centro?
- 24. Come abbinare più colonne in una tabella con SQLite FTS3?
- 25. pasticci colspan con tavolo larghezza fissa
- 26. Il modo più veloce di leggere in 100.000 file .dat.gz
- 27. Come allineare una stringa di larghezza fissa?
- 28. Larghezza della corsa fissa in SVG
- 29. Ridimensiona l'immagine JPEG a larghezza fissa, mantenendo le proporzioni come è
- 30. Colonna a larghezza fissa con un contenitore fluido in bootstrap
Ma potrei anche rimuovere tutte le colonne text/varchar/char da una tabella. Sarebbe quindi a larghezza fissa. Le mie domande sono se questo consentirà o meno una ricerca più rapida della colonna (a parte il fatto che è di dimensioni ridotte). – David
No, non lo farebbe. Come spiega il documento collegato, SQLite utilizza tipi di campi dinamici. Anche se dichiari un campo come INTEGER, puoi comunque memorizzare float, testo o anche blob. La dichiarazione "INTEGER" fornisce al campo una preferenza per l'archiviazione dei dati come numeri interi, ma non lo limita a farlo. Sarebbe comunque una colonna/record a larghezza variabile. (E questo è anche ignorando i dettagli che INTEGER non è in formato fisso in SQLite comunque ...) –