Domanda

È meno efficiente utilizzare TEXT di varchar in un database SQL?

Se sì, perché?

In caso contrario, perché non dovresti usare sempre TEXT?

Non sto prendendo di mira un database specifico qui, ma l'oracolo è probabilmente il più rilevante, anche se per il momento sto testando su MySQL come parte di una prova di concetto.

È stato utile?

Soluzione

Da Microsoft qui

  

i tipi di dati ntext, text e image lo faranno   essere rimosso in una versione futura di   Microsoft SQL Server. Evitare di utilizzare   questi tipi di dati in un nuovo sviluppo   lavorare e pianificare di modificare le applicazioni   che attualmente li usano. Uso   nvarchar (max), varchar (max) e   varbinary (max) invece.

Quando usi varchar (max) sul testo puoi usarlo nella clausola WHERE , perché funzionano allo stesso modo delle loro controparti più piccole, varchar, nvarchar e varbinary . Di seguito è riportato un piccolo elenco di ciò che dovrebbe essere usato al contrario di ciò che doveva essere usato:

  • Usa varchar (max) invece del testo
  • Usa nvarchar (max) invece di ntext
  • Usa varbinary (max) invece di image

Altri suggerimenti

La documentazione di PostgreSQL dice :

  

Suggerimento: non ci sono differenze di prestazioni tra questi tre tipi, a parte l'aumento delle dimensioni di archiviazione quando si utilizza il tipo con riempimento vuoto e alcuni cicli aggiuntivi per controllare la lunghezza quando si archivia in una colonna con vincoli di lunghezza. Sebbene il carattere (n) presenti vantaggi in termini di prestazioni in alcuni altri sistemi di database, PostgreSQL non presenta tali vantaggi. Nella maggior parte dei casi, invece, è necessario utilizzare testo o caratteri diversi.

La risposta breve è: Sì, sono meno efficienti.

La risposta più lunga e contorta è:

Sì, probabilmente sono meno efficienti. Dipende dal DBMS che si sta utilizzando e dalle dimensioni della tabella, ecc. Ecc. I campi TEXT hanno una larghezza variabile e pertanto il DBMS deve fare più lavoro quando cerca di trovare i record. Quanto questo impatto sulle tue prestazioni è direttamente proporzionale all'efficienza del tuo DBMS in generale, alla quantità di dati che archivia sulle righe delle tabelle e se ottimizza le tabelle a lunghezza fissa.

So che MySQL funziona più velocemente con le righe della tabella a lunghezza fissa, ma devi dire che la tabella può essere trattata prima come una tabella a lunghezza fissa. Non ho alcuna esperienza pratica con altri DBMS per essere in grado di mettere in relazione numeri reali. Ma sui tavoli con un sacco (legge un milione o più) di record, può fare una differenza significativa. Tuttavia, i tavoli più piccoli avranno poca o nessuna differenza pratica.

Devi essere specifico su quale database stai parlando. Credo in almeno alcuni database, TEXT è memorizzato come un CLOB separato dalla tabella stessa (che contiene solo un riferimento). Questo porta a una tabella più piccola (buona) ma con una ricerca extra e probabilmente cache miss durante il recupero (cattiva).

Probabilmente ci sono anche implicazioni sull'indicizzazione e sulla query, ma dipenderà ancora dal particolare RDBMS che stai usando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top