Sql Server 2000 prevede i cosiddetti Large Object (LOB) - detti anche Binary Large Object (BLOB) -, tre tipi di dati per registrare grandi quantità di dati (come ad esempio immagini e file): - TEXT: fino a 2 ^ 31 - 1 ( = 2.147.483.647 ) caratteri non-Unicode; - NTEXT: fino a 2 ^ 30 - 1 ( = 1.073.741.823 ) caratteri Unicode; - IMAGE: fino a 2 ^ 31 ( = 2.147.483.647 ) bytes di caratteri binari. Per motivi strutturali, i dati di una singola riga di tabella non possono eccedere gli 8060 bytes. A questo proposito, ricordo che Sql Server 2000 registra i suoi dati in strutture denominate Data Pages (pagine dati) che hanno dimensione pari a 8 Kb, di cui 8060 bytes dedicati ai dati veri e propri, e che i dati di una riga non possono essere ripartiti su più pagine dati. Perciò, per i dati di tipo LOB, viene adottato un sistema particolare che prevede la registrazione del dato in altre pagine dati (sempre di 8Kb). Ognuna di queste particolari pagine di dati, accoglie i dati di tipo LOB di una singola tabella, ed è velocemente attraversabile attraverso una struttura ad albero B-Tree. Quindi, nella pagina dati che accoglie la riga, sarà registrato un puntatore al nodo principale di questa struttura B-Tree. Ciò accadrà in ogni caso, anche se la dimensione della riga (compreso il dato LOB) fosse inferiore a 8060 bytes. In tal caso, per rendere più veloce il reperimento del dato LOB, possiamo intervenire mediante l'impostazione dell'opzione di tabella 'text in row'. Ecco un esempio: /* Transact-SQL */ sp_tableoption 'nome_tabella', 'text in row', 'ON' sp_tableoption 'nome_tabella', 'text in row', '1000' SELECT OBJECTPROPERTY(OBJECT_ID('Employee'), 'TableTextInRowLimit')SELECT OBJECTPROPERTY(OBJECT_ID('Customer'), 'TableTextInRowLimit') Nel primo caso, con l'opzione ON si imposta un numero di bytes disponibili nella pagina dati pari al default di 256 bytes. Nel secondo caso, si esplicita il valore di 1000 bytes - il range a disposizione è 24 - 7000 bytes. Se i dati LOB eccedono i bytes disponibili, la pagina dati accoglierà il nodo principale della struttura di pagine riservate ai dati LOB della specifica tabella. Affinchè l'impostazione 'text in row' abbia effetto sui dati LOB già presenti, gli stessi dati devono essere aggiornati. Se si vuole disabilitare l'opzione, si usa la stessa stored procedure di sistema specificando OFF oppure 0: /* Transact-SQL */ sp_tableoption 'nome_tabella', 'text in row', 'OFF' sp_tableoption 'nome_tabella', 'text in row', '0'
|