Domanda

Ho tabella con alcuni campi che il valore sarà 1 0. Questa tavoli saranno estremamente grande straordinari. E 'bene usare po' tipo di dati o il suo meglio usare tipo diverso per le prestazioni? Naturalmente tutti i campi dovrebbero essere indicizzati.

È stato utile?

Soluzione

Ufficialmente po 'sarà più veloce, soprattutto se non si consente i null. In pratica si potrebbe non importa, anche a grandi utilizzi. Ma se il valore sarà solo 0 o 1, perché non usare un po '? Suona come il modo in cui il migliore per garantire che il valore non verrà riempita con roba non valida, come 2 o -1.

Altri suggerimenti

Non posso dare alcuna statistiche sulle prestazioni, tuttavia, è necessario utilizzare sempre il tipo che è migliore rappresentante dei tuoi dati. Se invece si è 1-0 quindi assolutamente si dovrebbe utilizzare il campo di bit.

Le informazioni più si può dare il vostro database il più probabile è quello di ottenere che sia "ipotesi" a destra.

A quanto mi risulta, è ancora necessario un byte per memorizzare una colonna di bit (ma è possibile memorizzare 8 colonne bit in un singolo byte). Quindi, avendo un gran numero (quanti?) Di queste colonne bit potrebbe risparmiare un po 'su storage. Come Yishai ha detto che probabilmente non farà molta differenza in termini di prestazioni (anche se un po 'si tradurrà in un valore booleano nel codice dell'applicazione più bene).

Se si può affermare con fiducia al 100% che le due opzioni per questa colonna non cambierà mai poi con tutti i mezzi utilizzano il bit. Ma se si può vedere un terzo valore spuntando in futuro potrebbe rendere la vita un po 'più facile, quando quel giorno arriverà ad usare un tinyint.

Solo un pensiero, ma non sono sicuro di quanto bene un indice ti farà su questa colonna sia, a meno che non si vede la stragrande maggioranza di righe di andare da una parte o dall'altra. In un 50/50 di distribuzione o meno si potrebbe effettivamente prendere più di un colpo mantenere l'indice aggiornato di quello che guadagna vedreste nel interrogando la tabella.

Dipende.

Se si desidera massimizzare la velocità di seleziona, uso int (tinyint per risparmiare spazio), a causa bit in cui la clausola è più lento allora int (non drasticamente, ma ogni millisecondo conta). Anche fare la colonna non nulla che velocizza anche le cose. Di seguito è riportato link alla performance test vero e proprio, che vi consiglio vivamente di eseguire a proprio database e anche estenderlo utilizzando non null, indici e l'utilizzo di più colonne in una sola volta. A casa ho anche provato a confrontare con più colonne bit vs più colonne tinyint e le colonne tinyint erano più veloci (select count(*) where A=0 and B=0 and C=0). Ho pensato che SQL Server (2014) avrebbe ottimizzare facendo un solo confronto con maschera di bit, quindi dovrebbe da tre volte più veloce, ma che non era il caso. Se si utilizzano gli indici, si avrebbe bisogno di più di 5000000 righe (come usato nel test) a notare alcuna differenza (che non ho avuto la pazienza di fare dal tavolo riempire con più milioni di righe avrebbe preso le età sulla mia macchina).

https://www.mssqltips.com/sqlservertip/4137/sql-server-performance-test-for-bit-data-type-in-a-where-clause/

Se si desidera risparmiare spazio, l'uso po ', dal momento che 8 di loro possono ocuppy un byte, mentre 8 tinyints sarà OCCUP 8 byte. Che è di circa 7 Megabyte salvati su ogni milione di righe.

Le differenze tra questi due casi sono sostanzialmente trascurabile e dato utilizzando bit ha il vantaggio di segnalazione che la colonna rappresenta solo una bandiera, mi consiglia di utilizzare bit.

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