2009-12-29 2 views
1

J'ai une table SQL avec la structure suivante:Slim mais à long SQL Server 2005 Tableau

Code1 - int 
Code2 - int 
Val1 - real 
Val2 - real 
Val3 - real 

Il n'y a qu'un seul index (cluster) étaient Code1 est la première colonne indexée et Code2 est le deuxième. La taille d'un seul enregistrement est de 20 octets.

Je dois être en mesure de stocker environ 150 000 000 enregistrements et la plus grande opération de sélection porterait sur 500 000 enregistrements. Je suppose que la taille de la table sera autour de 3GB

Je voudrais savoir si cette conception fonctionnera ou il pourrait y avoir des problèmes 'inexpliqués' ou des ralentissements en traitant avec une telle grande table.

+2

Je ne vois pas de champ d'identification. Utiliserez-vous (code1, code2) comme clé primaire aussi? Est-ce que (code1, code2) est unique? –

+4

quel genre de requêtes aurez-vous sur la table? Cela détermine vraiment ce qui doit être indexé. –

Répondre

0

Il y a une question très complète sur les performances de SQL et de grandes tables: Very large tables in SQL Server

+1

150 mio. ne se qualifie pas vraiment comme "très grand" dans SQL Server ..... –

+0

+1 marc_s, mais n'est pas un bon début? –

1

Fondamentalement, une table avec 150 millions de lignes est rien pour SQL Server - va même pas casser une vraie sueur :-)

Le point est vraiment: comment accéder aux données? Quel genre de requêtes aurez-vous? Par exemple. Si vous avez des requêtes qui ont une clause WHERE avec seulement la colonne "col2", alors vous n'avez pas une bonne configuration avec un index clusterisé sur (col1, col2).

En outre: comment les données sont-elles distribuées dans vos champs? Lesquels sont sélectifs, lesquels sont plus uniformes? Si col1 ou col2 sont hautement sélectifs (par exemple, une seule valeur sélectionne significativement moins de 2% des données), utilisez ce champ pour vos sélections, si possible. Indexer quelque chose comme un champ "genre" qui pourrait avoir deux, trois valeurs différentes n'aidera pas vraiment, puisque toute sélection utilisant ce champ comme une clause WHERE retournera toujours trop de données pour être efficace.

+0

Chaque requête aurait un WHERE sur les deux code1 et code2. code1 et code2 sont la clé primaire. Je regarde ~ 200 000 enregistrements ajoutés chaque jour. Il existe un seul type de requête préformée sur cette table avec une plage sur code1 et une plage sur code2. – Gilad

+0

et comment sélectif sont code1 et code2 ?? Par exemple. étant donné une valeur pour code1, combien de pour cent du total des données est sélectionné? –

+1

Gilad - la raison pour laquelle marc_s pose la question de la sélectivité sur col1 et col2 est parce que cela fera une différence sur le champ que vous devez placer en premier. Si col2 est plus sélectif (c'est-à-dire qu'il y a plus de données uniques), alors il doit être placé en premier dans l'index clusterisé. –