J'essaie de décider quelle approche prendre dans une base de données que je conçois. Je vais ajouter une colonne ProcessedDate datetime null
dans un tableau. Il sera nullable lorsque l'enregistrement n'a pas été traité. Alors, vaut-il mieux avoir une colonne Processed bit not null default 0
? Quelle est la différence de performance entre les deux versionsDans SQL Server, qu'est-ce qui fonctionne mieux: où ProcessedDate est null ou où Processed = 0
select * from tablename where ProcessedDate is null
et
select * from tablename where Processed = 0
Toutes choses étant égales par ailleurs *,:
Avec les requêtes suivantes?
*: Les indices appropriés sont appliqués à la table dans chaque version. Je ne cherche pas de conseil sur les indices à créer. Je veux seulement des informations sur la performance du filtre appliqué à une seule ligne. Si toutes les lignes de la table doivent être scannées, ou si une recherche est effectuée, cela n'a aucun rapport avec la question en question. Je sais que l'argument Processed est plus explicite et donc plus lisible, mais il soulève aussi des problèmes de synchronisation des colonnes (qui pourraient être traitées en utilisant une colonne calculée). Quoi qu'il en soit, je veux limiter la portée de cette question à la performance.
Je sais que la différence de performance sera faible, et probablement négligeable par rapport à d'autres problèmes tels que l'indexation et la sélection de toutes les colonnes, etc. Je connais aussi les modèles de domaine. Je veux juste savoir laquelle des deux options fonctionne le plus rapidement. – David
Pourquoi ne l'essayez-vous pas? Je vais vous acheter une bière virtuelle si vous pouvez mesurer n'importe quelle différence – erikkallen