Anche se non sono d'accordo sul fatto che i BLOB debbano essere solo in un'altra tabella, non dovrebbero affatto essere nel database . Memorizza un puntatore su dove risiede il file sul disco, quindi prendilo dal database ...
Il problema principale che causano (per me) è con l'indicizzazione. Usando XML con piani di query, perché tutti ce l'hanno fatta, facciamo una tabella:
SELECT TOP 1000
ID = IDENTITY(INT,1,1),
deq.query_plan
INTO dbo.index_test
FROM sys.dm_exec_cached_plans AS dec
CROSS APPLY sys.dm_exec_query_plan(dec.plan_handle) AS deq
ALTER TABLE dbo.index_test ADD CONSTRAINT pk_id PRIMARY KEY CLUSTERED (ID)
Sono solo 1000 righe, ma controllando le dimensioni ...
sp_BlitzIndex @DatabaseName = 'StackOverflow', @SchemaName = 'dbo', @TableName = 'index_test'
Sono oltre 40 MB per solo 1000 file. Supponendo di aggiungere 40 MB ogni 1000 righe, ciò può diventare piuttosto brutto abbastanza rapidamente. Cosa succede quando colpisci 1 milione di righe? Sono solo 1 TB di dati, lì.
Tutte le query che devono utilizzare l'indice cluster devono ora leggere tutti i dati BLOB nel chiarimento della memoria : quando si fa riferimento alla colonna di dati BLOB.
Riesci a pensare a modi migliori per utilizzare la memoria di SQL Server rispetto alla memorizzazione di BLOB? Perché sicuramente posso.
Espandendolo in indici non cluster:
CREATE INDEX ix_noblob ON dbo.index_test (ID)
CREATE INDEX ix_returnoftheblob ON dbo.index_test (ID) INCLUDE (query_plan)
È possibile progettare gli indici non cluster per evitare ampiamente la colonna BLOB in modo che query regolari possano evitare l'indice cluster, ma non appena è necessaria quella colonna BLOB, è necessario l'indice cluster.
Se lo aggiungi come INCLUDED
colonna a un indice non cluster per evitare uno scenario di ricerca chiave, finisci con giganteschi indici non cluster:
Più problemi che causano:
- Se qualcuno esegue una
SELECT *
query, ottengono tutti quei dati BLOB.
- Occupano spazio nei backup e nei ripristini, rallentandoli
- Rallentano
DBCC CHECKDB
, perché so che stai cercando la corruzione, giusto?
- E se si esegue la manutenzione dell'indice, anche loro rallentano.
Spero che sia di aiuto!