|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Invité de passage
![]() Inscription : octobre 2008 Messages : 9 ![]() |
Bonjour,
Voila je travaille sur un projet de géolocalisation avec SqlServer2008 , j'ai une table "trame" qui contiendra tous les trames de tous les boitiers GPS qui sont au nombre de 1000 , un boitier envoie en moyenne 10 000 trames en un mois, donc ma table contiendra minimum 10 millions de lignes en un mois. La clé de cette table est un entier auto incrément. Ma question est que lorsque je fait un Citation:
et merci. |
|
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 674 ![]() |
Bonjour,
Citation:
Pour obtenir un temps de réponse raisonnable, il vous suffit pour cela d'indexer la colonne boitier_GPS_id de la table dbo.trame. Citation:
Cela dit même avec 1000 boîtiers je doute que cela soit assez sélectif pour vous retourner un résultat en quelques secondes lorsque la table aura atteint son véritable volume de production. Je ne doute pas que la table contient une colonne probablement de type datetime ou même datetime2. Donc il est évident que vous allez filtrer la table par date et par boîtier. En ce sens il vaudra donc mieux créer un index non-cluster composite sur ces deux colonnes ... Peut-être même que ce devrait être une contrainte d'unicité ? C'est à dire qu'à tout moment, le couple {date, boîtier} dans l'entité trame est unique. A ce moment là c'est encore mieux puisque vous avez la meilleure sélectivité possible Dans l'attente de vos réponses et de la structure exacte de la table (colonnes, leurs types, et les index). @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : octobre 2008 Messages : 9 ![]() |
Salut Nicolas,
Je vous remercie pour votre explication, c'est vrai que je n'étais pas très précis, voila le format de la table trame: Trame( Rang_Trame,HHMMSS, Date, Longitude, Latitude, Atitude, Vitesse, Cap, #Id_Boitier) ; tel que: Rang_trame: est la clé primaire unique (int auto increment), HHMMSS: est l'heure+minutes+secondes //j'ai séparer l'heure de la date. ID_Boitier: est une clé étrangére, Citation:
Donc mes sélections vont se faire sur ces deux colonnes: "ID_Boitier" et "Date". Sachant que la colonne "Date" est déjà triée, donc il serait facile à mon avis de l'indexer même en cluster. Voici un petit extrait de la table Trame : Rang_Trame_______Date___________HHMMSS__….....______ID_Boitier 734651________04/01/2012________13 :25 :22_____________121 734652________04/01/2012________13 :25 :55_____________444 734653________04/01/2012________13 :25 :59_____________322 734654________04/01/2012________13 :26 :03_____________121 734655________04/01/2012________13 :26 :12_____________444 734656________04/01/2012________13 :26 :29_____________533 734657________04/01/2012________13 :26 :31_____________121 Citation:
Et pourquoi ne pas le faire comme Index Cluster (indexant les deux colonnes Date+ID_Boitier) ? Citation:
Une autre question : Est ce que les index fonctionnent avec les requetes contenant "Between" dans le where? par exemple: Citation:
Je n'ai pas l'habitude de travailler avec des flux de données gigantesques cordialement. |
||||
|
|
00
|
|
|
#4 | ||||||
![]() ![]() |
Citation:
La requête pour récupérer les données entre le 4 janvier 23h30 et le 6 janvier 00h30 s'écrit ainsi : Code :
Code :
Citation:
http://technet.microsoft.com/en-us/l...(SQL.100).aspx
__________________
Email : http://scr.im/waldar |
||||||
|
00
|
Copyright © 2000-2012 - www.developpez.com