Sto creando un database in cui ci saranno circa 30 tabelle, con ogni tabella contenente decine di milioni di righe e ogni tabella contenente una singola colonna importante e una colonna chiave primaria / esterna al fine di massimizzare l'efficienza della query di fronte a pesanti aggiornamenti e inserimenti e fanno un uso pesante di indici cluster. Due delle tabelle conterranno dati testuali di lunghezza variabile, con una contenente centinaia di milioni di righe ma il resto conterrà solo dati numerici.
Dato che voglio davvero spremere fino all'ultima goccia di prestazioni dall'hardware che ho a disposizione (circa 64 GB di RAM, un SSD molto veloce e 16 core), stavo pensando di consentire a ogni tabella di avere il proprio file in modo che non importa se Mi unisco a 2, 3, 4, 5 o più tabelle, ogni tabella verrà sempre letta utilizzando un thread separato e la struttura di ciascun file sarà strettamente allineata con il contenuto della tabella, il che si spera minimizzerebbe la frammentazione e la renderebbe più veloce per SQL Server da aggiungere al contenuto di una determinata tabella.
Un avvertimento, sono bloccato su SQL Server 2008 R2 Web Edition . Ciò significa che non posso usare il partizionamento orizzontale automatico, che lo esclude come un miglioramento delle prestazioni.
L'uso di un file per tabella massimizzerà effettivamente le prestazioni o sto trascurando le caratteristiche integrate del motore SQL Server che renderebbero così ridondante?
In secondo luogo, se l'utilizzo di un file per tabella è vantaggioso, perché create table
mi dà solo la possibilità di allocare la tabella a un gruppo di file e non a un file logico specifico? Ciò richiederebbe di creare un gruppo di file separato per ogni file nel mio scenario, il che mi suggerisce che forse SQL Server non sta immaginando i vantaggi che presumo derivino dal fare ciò che sto proponendo.