Je veux juste savoir par curiosité que Select Count(*) from SomeTableName
parcourt également toutes les lignes de la database comme celle de Select * from SomeTableName
?
Ou existe-t-il un autre champ de count disponible dans les métadonnées de la database qui se met à jour chaque fois qu'une ligne est ajoutée ou supprimée? Et ce champ est accessible par l'ancienne requête.
Aussi, je veux savoir laquelle des deux requêtes est plus rapide et combien?
SELECT Count(*) FROM SomeTableName
countra toujours toutes les lignes. Bien que (contrairement à SELECT *
), il n'a pas besoin de lire toutes les colonnes et peut utiliser l'index le plus étroit (non filtré) disponible pour le faire.
Contrairement à MySQL (moteur MyISAM), il ne récupère pas la valeur des métadonnées.
Une valeur rowcount est disponible dans les métadonnées et peut être récupérée à partir de sys.partitions
mais elle n'est jamais utilisée pour les requêtes COUNT
et n'est pas toujours précise.