SQL prestazioni tabella VS tabelle

martedì 24 novembre 2009 - 09.50

andrestu Profilo | Expert

dovendo implementare un database che potrebbe arrivare a contenere molti dati sono indeciso tra due soluzioni diverse:

- creare una tabella dove all'interno inserirò tutti i dati
- dividere i dati per più tabelle

Quello che mi chiedo è che se il numero di dati aumenta notevolmente quale delle due soluzioni da prestazioni migliori e quale occupa meno spazio su disco.

Premetto che i dati verranno prelevati e inviati da un sito Aspnet e il DB Sql è alloggiato sullo stesso dominio di hosting del sito.
I dati da inserire saranno suddivisi x ogni utente, nel senso che ogni utente del sito avrà i suoi dati.
Quindi x esempio se ci saranno 1000 utenti potrò avere una tabella con 1000 righe ed ognuna assocciata ad un utente oppure 1000 tabelle ognuna x utente.

Quindi se x esempio se io facessi un select x un utente sarebbe più prestante prelevare i dati dalla tabella contentente 1000 righe o nell'altro modo?
e cioè quando faccio un select da aspnet ad una tabella di 1000 righe e ci inserisco la clausola "WHERE user = @user" (quindi in questo caso mi preleverebbe solo la riga dell'utente coinvolto) il select verrà fatto su server SQL e quindi non avrò tutto il transito delle 1000 righe da SQL ad IIS o viceversa?

bisogna considerare il caso in cui più utenti fanno richieste e modifiche al DB contemporeanemente...

Brainkiller Profilo | Guru

>dovendo implementare un database che potrebbe arrivare a contenere
>molti dati sono indeciso tra due soluzioni diverse:

Provo a rispondere io.

>- creare una tabella dove all'interno inserirò tutti i dati
>- dividere i dati per più tabelle

Si si può fare, ma dipende quante sono queste righe, tu dici tante, ma tante quante ? A quanto pensi di poter arrivare. Secondo me certamente meno rispetto all'opzione di dividere i dati in più tabelle usata di solito quando parliamo di milioni di righe (certamente a quel punto avrai un server dedicato e non sarai in hosting). Per questi casi si usano sistemi come partizionamento di tabelle o cose analoghe.

>Quello che mi chiedo è che se il numero di dati aumenta notevolmente
>quale delle due soluzioni da prestazioni migliori e quale occupa
>meno spazio su disco.

Certamente la seconda opzione, cioè con il partizionamento però tutto dipende dal numero di righe. Io ho tabelle con 4/500 mila righe (che sono poche), tutto in una tabella, zero problemi.

>Quindi se x esempio se io facessi un select x un utente sarebbe
>più prestante prelevare i dati dalla tabella contentente 1000
>righe o nell'altro modo?

La cosa più prestante, è ricavare da una tabella solo ed unicamente le informazioni che ti servono e che vuoi visualizzare. Se c'è una rubrica di 50 mila utenti è inutile fare una select * from tabella di tutte e 50.000 ma piuttosto è più facile e veloce ricavare pagine da 100 utenti alla volta, no ? Anche perchè 50.000 righe all'utente come gliele rappresenti ? Non riuscirebbe neanche a districarsi dal casino.


>il select verrà fatto su server SQL e quindi non avrò tutto il
>transito delle 1000 righe da SQL ad IIS o viceversa?
>bisogna considerare il caso in cui più utenti fanno richieste
>e modifiche al DB contemporeanemente...

Esatto. Proprio così. Meno dati richiesti, meno traffico di rete, meno risorse utilizzate, meno tempo ad eseguire.
Piuttosto è meglio richiedere in query diverse e in momenti diversi dati della stessa tabella. Sempre per l'esempio sopra è inutile chiedere 50 mila righe se poi devi visualizzare solo 3 pagine quindi 300 records no ?
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
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