xplayn > share your experience     
RSS Feed Login     Password        » Registrati «
  
          Home
  Team & Mission
          News
  Development
  Database
          Pubblicazioni
  Articoli
  Tips
  IMHO
          Risorse
  Guide/Manuali/Tools
  Glossario SQLServer
  Collabora con noi
          Blogs
  Maurizio Tammacco
  Francesco Quaratino
  Renzo Pampani
          Formazione
  Database
 
                Partners
      http://www.dotnetside.org
 
 
Pubblicazioni »
Large Object (LOB) in Sql Server 2000
   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'

 
Autore E-Mail Web Site Data
Francesco Quaratino francesco_AT_xplayn.org www.xplayn.org 09/06/2006
      ©Copyright 2005 - xplayn.org