La dernière valeur de l'id dans une table. SQL Server
Est-il un moyen de savoir quelle est la dernière nth
champ id de la table, sans les analyser complètement? (il suffit d'aller à l'extrémité de la table et obtenir la valeur de l'id)
table
id fieldvalue
1 2323
2 4645
3 556
... ...
100000000 1232
Ainsi, par exemple ici n = 100000000
de 100 Millions de
--------------EDIT-----
Alors, qui des requêtes proposé serait plus efficace?
- si tout ce que vous voulez, c'est le numéro d'id et non pas l'ensemble du dossier, le mien est le moyen le plus rapide - c'est pourquoi je l'ai posté car il répond à la question posée. Maintenant, si vous voulez l'ENSEMBLE du dossier, il serait ce que michael a suggéré. Et sur une note: si c'est l'id et la clé primaire, il devrait déjà être indexé par défaut (je crois)
- Difficile à dire, une réponse sur ce post semble indiquer que IDENT_CURRENT est le plus rapide, mais je vais avoir un moment difficile de confirmer que n'importe où ailleurs: stackoverflow.com/questions/590079/.... IDENT_CURRENT œuvres au cours d'une session et de toute envergure, de sorte qu'il peut être préférable si il y a beaucoup d'activité sur ce tableau.
- Juste pour le fun, j'ai couru les deux méthodes à l'encontre d'un essai DB j'ai lors de l'exécution du générateur de profils SQL. Les deux sont vraiment rapide, mais IDENT_CURRENT montre 0 pour le CPU/Lit/Durée alors que MAX(ID) est la cause d'une légère nombre de lectures. Je pense que IDENT_CURRENT est plus rapide, mais les chances sont les deux marchent bien dans la mesure où la performance est concerné.
Vous devez vous connecter pour publier un commentaire.
id
valeur est monotone croissante de la valeur (l'OP ne dit rien à ce sujet étant unidentity
colonne, bien que selon toutes les apparences il est).En supposant que l'ID est l'identifiant de la table, vous pouvez utiliser
SELECT IDENT_CURRENT('TABLE NAME')
.Voir ici pour plus d'info.
Une chose à noter à propos de cette approche: Si vous avez des Insertions de ne pas incrémenter le compteur d'IDENTITÉ, alors vous obtiendrez un résultat plus élevé que le résultat retourné par
SELECT MAX(id) FROM <tablename>
INT IDENTITY
terrain - pas de clé primaire (c'est sans importance)Vous pouvez également utiliser le système de tables pour obtenir toutes les dernières valeurs de toutes les colonnes d'identité dans le système:
Dans le cas où
table1
lignes sont insérées en premier, puis les lignes detable2
qui dépendent des identifiants de latable1
, vous pouvez utiliserSELECT
:Bien sûr, cela ne peut fonctionner que si il y a d'autres identifiants qui peuvent identifier de manière unique les lignes de
table1
Tout d'abord, vous voulez accéder à la table dans l'ordre DÉCROISSANT par ID.
Ensuite, vous sélectionnez les N premiers enregistrements.
À ce stade, vous souhaitez que le dernier enregistrement de l'ensemble qui, espérons-le, c'est évident. En supposant que le champ id est indexée, ce serait au plus récupérer les N derniers enregistrements de la table et il est probable finissent par être optimisé en un seul enregistrement d'extraction.
Sélectionnez Ident_Current('Votre Nom de la Table') donne le dernier Id de votre table.