C'è qualche punto nel sottodimensionare le colonne VARCHAR?


18

Googling lì sembra essere rapporti contrastanti se la dimensione di una VARCHAR2colonna in Oracle influisce sulle prestazioni o meno.

Vorrei dare VARCHARuna piccola svolta alla domanda sulla dimensione e spero di avere qualche idea in questo:

Dati campi (multilinea) a testo libero ( non cose brevi come i nomi) che si desidera archiviare in un database (Oracle), c'è qualche punto (prestazioni wrt. O altro) nel non massimizzare la VARCHARcapacità ( VARCHAR2(4000)su Oracle) ma scegliere un valore inferiore come 1024 o 512 perché probabilmente sarà sufficiente nel 98% dei casi.


Risposte:


12

Influisce sull'utilizzo della memoria, soprattutto quando un programma client deve allocare memoria sufficiente per ricevere un set di dati.

Tieni presente che molte app (in particolare le app Web) utilizzano UTF-8, che è un set di caratteri multi-byte. Come tale, dovresti davvero considerare i caratteri piuttosto che i byte.

Se mi aspettassi più di mille personaggi, prenderei attivamente in considerazione un CLOB. Penserei se memorizzerà il testo in chiaro o una qualche forma di markup (wiki / html?), L'utilizzo con linguaggi non Euro. Le domande e le risposte qui, ad esempio, sarebbero CLOB, ma i commenti possono rientrare in un VARCHAR.

Se massimizzi un VARCHAR, in sei mesi qualcuno vorrà ingrandirlo di nuovo e ti daresti un calcio per non usare un CLOB.


2
UTF-8 utilizzerà generalmente un byte per un carattere per le lingue occidentali. È multi-byte, nel senso che consente alle sequenze di "escape" multi-byte di rappresentare caratteri non occidentali.
Eric J.

9

Generalmente non ci sono considerazioni sulle prestazioni sebbene ci siano problemi collaterali che potrebbero interessarti. Il limite per un varchardovrebbe essere considerato come un vincolo come qualsiasi altro - è lì per far rispettare una regola aziendale.

IMO la domanda che dovresti porre è "Voglio impedire che i dati di testo libero memorizzati in questo campo siano più lunghi di n byte / caratteri" - questo è l'unico fattore determinante nella scelta tra varchar(512)e varchar(4000).

Si noti che sto assumendo che tu stia parlando varchardel tipo SQL: la situazione è diversa pl/sqle la scelta della lunghezza può essere cruciale per motivi di allocazione della memoria.


Grazie. Per quanto riguarda la mia (molto limitata) esperienza, qualsiasi "regola commerciale" che stabilisca un limite tra "500 - 3999" è semplicemente arbitraria, cioè a qualcuno piace solo il numero. IMHO, se sto andando per il testo libero e non ci sono conseguenze sull'implementazione (il contesto di questa domanda), o è al massimo (4000) o non è testo libero. --- Il punto che sto cercando di chiarire in questo commento: penso che non ci sarà mai una regola aziendale che aiuti a scegliere tra. 512 e 4000 (a meno che non sia: "quanti più caratteri possibili")
Martin

Se è davvero "il maggior numero possibile di caratteri", allora come dice @gary, dovresti considerare un clob, non è vero?
Jack Douglas,

4

Se un valore più piccolo funzionerà per il 98% dei casi, ma ci vuole un Varchar2 (4000) per funzionare per il 100% dei casi, allora non hai altra scelta che usare il valore più grande . La creazione di una tabella separata per il 2% dei valori e quindi il coordinamento di inserti / selezioni ecc. Aggiungerebbe complessità che annullerebbe qualsiasi vantaggio di memoria o prestazioni derivante dalla non estensione del campo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.