Domanda

C'è qualche vantaggio nell'usare int vs varbinary per memorizzare maschere di bit in termini di prestazioni o flessibilità.

Per i miei scopi, farò sempre delle letture su queste maschere di bit (nessuna scrittura o aggiornamento).

È stato utile?

Soluzione

Dovresti assolutamente usare un INT (se hai bisogno di 32 flag) o BIGINT (per 64 flag). Se hai bisogno di più flag puoi usare BINARY (ma probabilmente dovresti anche chiederti perché hai bisogno di così tante bandiere nella tua applicazione).

Inoltre, se si utilizza un tipo integrale, è possibile utilizzare operatori direttamente senza convertire un array di byte in un tipo integrale.

Se hai bisogno di più flag e devi usare BINARY perdi il supporto nativo per gli operatori bit a bit e quindi un facile supporto per il controllo dei valori dei flag. Probabilmente mi sposterei controllando i valori dei flag in un'applicazione client, ma se hai dimestichezza con la programmazione in T-SQL, anche questa è un'opzione. Se stai usando C # hai un BitArray con le operazioni necessarie e in Java hai una classe BitSet .

Altri suggerimenti

È generalmente preferibile utilizzare un gruppo di colonne di bit anziché una maschera di bit. Saranno impacchettati insieme nella pagina, quindi non avranno più spazio. Sebbene anche io sembri sempre andare con una colonna int o bigint per evitare di scrivere tutto il nome della colonna .. ma con intellisense probabilmente andrei con le colonne di bit.

Bene, considerando un int ha meno spazio di archiviazione ed è generalmente un po 'più facile lavorare con non sono sicuro del perché dovresti usare un varbinary.

Di solito concordo con la risposta di @ hainstech sull'uso dei campi di bit, poiché è possibile assegnare un nome esplicito a ciascun campo di bit per indicare ciò che deve memorizzare. Tuttavia non ho visto un approccio pratico per fare confronti con maschere di bit con bit field. Con gli operatori bit a bit di SQL Server (& amp ;, |, ecc ...) è facile scoprire se è impostato un intervallo di flag. Molto più lavoro per farlo con operatori di uguaglianza contro un gran numero di campi bit.

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