[sql 2005] Regola generale

lunedì 03 maggio 2010 - 20.07

tankian Profilo | Junior Member

Ciao,

Il mio è un problema più di "logica" di database che di pratica. Cerco di fare un esempio, spero di non essere troppo vago.


Ipotizzando di avere a che fare con due tabelle, tab1 e tab2,

La tab1 contiene 10 record distinti da un ID.

La TAB2 si rifà alla TAB1 tramite l'ID ed ha per ogni ID 250.000 Record.

Naturalmente ad ogni INSERT/UPDATE/DELETE nella TAB1 viene effettuata la stessa operazione per quell'ID nella tab2.


Avendo una situazione del genere, capite subito che aumentando i record nella tab1, la tab2 aumenta a dismisura, diminuendo a sua volta le performance in maniera esponenziale.

Ora, ho pensato alla soluzione di creare una tabella per ogni ID della tab1, quindi con 10 record, 10 tabelle con 250.000 record ciasquna (invece di un'unica tabella con 2.500.000 record).


Essendo abbastanza inesperto in materia, non vorrei di andare a fare qualcosa di "spiacevole"; quindi chiedo, vi sembra proponibile come soluzione? o avete qualche altro suggerimento?

grazie in antiipo


alx_81 Profilo | Guru

>Ciao,
Ciao

>Ipotizzando di avere a che fare con due tabelle, tab1 e tab2,
>La tab1 contiene 10 record distinti da un ID.
>La TAB2 si rifà alla TAB1 tramite l'ID ed ha per ogni ID 250.000
>Record.
E come mai ha così tanti record "figli"? Cosa li contraddistingue?

>Ora, ho pensato alla soluzione di creare una tabella per ogni
>ID della tab1, quindi con 10 record, 10 tabelle con 250.000 record
>ciasquna (invece di un'unica tabella con 2.500.000 record).
Gli ID della tab1 non saranno sempre 10, quindi dovresti archittettare una soluzione molto macchinosa di creazione dinamica di oggetti, naming convention e successiva implementazione applicativa molto intrecciata e piena di considerazioni. Pensa anche alle eliminazioni, alle modifiche, insomma, viene un cestone di considerazioni che forse puoi evitarti con un partizionamento. Considera poi anche il tipo di operazioni che devi effettuare principalmente sulla tabella, la leggerai spesso? Leggerai sempre una porzione? C'è una data che discrimina un ambiente ONLINE da uno STORICO? Puoi pensare di fare una tabella partizionata su di una chiave (che può essere l'id, oppure ciò che contraddistingue appunto i 250000 record figli). Puoi pensare ad una tabella dei dati online ed uno storage di storico, ecc..
Per saperne di più sul partizionamento guarda qui:
http://msdn.microsoft.com/en-us/library/ms345146(SQL.90).aspx

>grazie in antiipo
di nulla!
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

tankian Profilo | Junior Member

Ciao, ho capito più o meno come funzionano le partition table.

Effettivamente penso che facciano proprio al caso mio, anche se mi sn sembrate un pò più complesse del workaround che avevo pensato , cmq adesso le studierò meglio, Grazie!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5